R 仅在特定索引中连接数据帧的字符串行

R 仅在特定索引中连接数据帧的字符串行,r,concatenation,R,Concatenation,假设我们有一个包含两列、一个字符、一个数字的数据框: 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 如

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

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

如果没有for循环,您将如何执行此操作?

好的,我知道了。诀窍是使用
zoo::na.locf
填充
na
值,然后
groupby
paste

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)

你问了这个问题,在你想出解决方案的那一分钟内,你写下了下面所有的代码并发布在这里?不,我写了这个问题,然后认为我必须能够解决它,然后认为我的解决方案可能会对其他人有利,并发布了问题和答案。根据所谓的“法律”,这是错误的吗?告诉我,我会删除所有内容。这很公平。我不知道规则,只是有点困惑;)此外,根据“规则”,在两天过去之前,我不能接受自己的答案,我假设这样做是为了让其他人想出可能更好的解决方案。他们什么都想到了!是的,你在这里所做的一切都很正常。
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)