我有一个如下所示的数据框:
line = c(1, 2, NA, 4 ,5, NA, 7)
group = c("1.0 Group A", "2.0 Group B", "3.0 Group C", "4.0 Group D", "5.0 Group E", "6.0 Group F", "7.0 Group G")
df <- data.frame(line, group)
view(df)
line group
1 1 1.0 Group A
2 2 2.0 Group B
3 NA 3.0 Group C
4 4 4.0 Group D
5 5 5.0 Group E
6 NA 6.0 Group F
7 7 7.0 Group G
我想要做的是找到“行”列中的所有 NA 值,并在“组”列中该行下方放置一行,显示“不适用”。这样新的数据框应该如下所示:
view(df)
line group
1 1 1.0 Group A
2 2 2.0 Group B
3 NA 3.0 Group C
4 NA Not Applicable
5 4 4.0 Group D
6 5 5.0 Group E
7 NA 6.0 Group F
8 NA Not Applicable
9 7 7.0 Group G
我正在考虑使用 ifelse 语句或使用 dplyr 中的 case_when 。但我不知道如何解决。有人有什么建议吗?
谢谢你!
这是一个基本的 R 方法:按累积 NA 计数分割数据,添加新行,重新组合。
df$group = as.character(df$group)
split_df = split(df, cumsum(is.na(df$line)))
split_df[-1] = lapply(split_df[-1], function(d) rbind(d[1, ], data.frame(line = NA, group = "Not applicable"), d[-1, ]))
do.call(rbind, split_df)
# line group
# 0.1 1 1.0 Group A
# 0.2 2 2.0 Group B
# 1.3 NA 3.0 Group C
# 1.1 NA Not applicable
# 1.4 4 4.0 Group D
# 1.5 5 5.0 Group E
# 2.6 NA 6.0 Group F
# 2.1 NA Not applicable
# 2.7 7 7.0 Group G
请注意,我转换了group
to character
为了让添加新值变得容易,我把NA
是在line
列 - 数字向量中不能只包含空格,每个元素都必须是数字或NA
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)