B2", "dddd", "eeeee","ff", ">-6ren">
gpt4 book ai didi

r - 如果前一行包含以特定符号开头的字符串,则合并行

转载 作者:行者123 更新时间:2023-12-03 07:57:00 27 4
gpt4 key购买 nike

我有一个如下所示的数据框:

df <- data.frame(V1=c(">A1", "aaaa", "bbb", "cccc",
">B2", "dddd", "eeeee","ff",
">C3", "ggggggg", "hhhhh", "iiiii", "jjjjj"))

这就是我想要得到的:

df1 <- data.frame(V1=c(">A1", "aaaabbbcccc",
">B2", "ddddeeeeeff",
">C3", "ggggggghhhhhiiiiijjjjj"))

如您所见,我想合并包含以“>”符号开头的字符串的两行之间的每一行。坦白说,我不知道从哪里开始。请指教。

最佳答案

我们可以使用cumsum(grepl(.))为此。

data.frame(
V1 = unlist(
by(df$V1, cumsum(grepl("^>", df$V1)),
function(z) c(z[1], paste(z[-1], collapse = "")))
)
)
# V1
# 11 >A1
# 12 aaaabbbcccc
# 21 >B2
# 22 ddddeeeeeff
# 31 >C3
# 32 ggggggghhhhhiiiiijjjjj

简要说明:

  • grepl(.)返回TRUE对于每个 > -含有细胞;那么

  • cumsum为该行和所有行分配相同的编号,直到下一次出现:

    grepl(">", df$V1)
    # [1] TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
    cumsum(grepl(">", df$V1))
    # [1] 1 1 1 1 2 2 2 2 3 3 3 3 3
  • by(.)对每个群体做一些事情;在本例中,它返回长度为 2 的向量,其中 > -首先是字符串,然后连接所有其他字符串。

其结构为您的 df1 ,

df1
# V1
# 1 >A1
# 2 aaaabbbcccc
# 3 >B2
# 4 ddddeeeeeff
# 5 >C3
# 6 ggggggghhhhhiiiiijjjjj

关于r - 如果前一行包含以特定符号开头的字符串,则合并行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75833706/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com