假设我们有一个包含两列的数据框,一个字符,一个数字:
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
列的行,每次仅在NA
的非ind
索引之间行?
我希望第一行直到第一行非NA
被忽略,然后我们遇到ind
= 1,然后连接“d”和“e”,然后我们遇到ind
= 2,然后连接“g”和“h”等。创建:
newChar
"d e"
"g h"
"j"
如果没有for循环,你会怎么做?
答案 0 :(得分:1)
好的,我明白了。诀窍是使用zoo::na.locf
填充NA
值,然后group_by
和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)