【问题标题】:Concatenate string rows of a data frame only in specific indices仅在特定索引中连接数据帧的字符串行
【发布时间】:2017-04-21 14:09:02
【问题描述】:

假设我们有一个包含两列、一个字符、一个数字的数据框:

df <- data.frame(chr = letters[1:10],
             ind = c(NA, NA, 1, NA, NA, 2, NA, NA, 3, NA))

   chr ind
1    a  NA
2    b  NA
3    c   1
4    d  NA
5    e  NA
6    f  2
7    g  NA
8    h  NA
9    i   3
10   j  NA

您如何粘贴chr 列的行,每次只占用ind 中非NA 索引之间的行?

我希望第一行直到第一个非NA被忽略,然后我们遇到ind = 1,然后连接“d”和“e”,然后我们遇到ind = 2,然后连接“ g”和“h”等。创建:

newChar
"d e"
"g h"
"j"

如果没有 for 循环,你将如何做到这一点?

【问题讨论】:

  • 您提出了这个问题,并在一分钟内找到了解决方案,并在下面编写了所有代码并将其发布在此处?
  • 不,我写了这个问题,然后认为我必须能够解决它,然后认为我的解决方案可能对其他人有益,并发布了问题和答案。根据 SO“法律”,这是错误的吗?告诉我,我会删除所有内容。
  • 很公平。我不知道规则,这让我有点困惑;)
  • 另外根据“规则”,在两天过去之前我不能接受自己的答案,我假设是为了让其他人想出可能更好的解决方案。他们什么都想好了!
  • 是的,根据 SO 规范,您在这里所做的一切都很好。

标签: r concatenation


【解决方案1】:

好的,我明白了。诀窍是使用zoo::na.locf 填充NA 值,然后使用group_bypaste

library(dplyr)
library(zoo)
df %>%
  mutate(bool = is.na(ind), groupID = na.locf(ind, na.rm = FALSE)) %>%
  filter(bool & !is.na(groupID)) %>% group_by(groupID) %>%
  summarise(newChr = paste(chr, collapse = " ")) %>%
  select(newChr)

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    相关资源
    最近更新 更多