我有一个像这样的数据框:
df <- data.frame("F" = c("N°", "X", "X", "Total", "N°", "X", "X", "X", "X", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))
在我的示例中,“ X”不是真正的“ X”只是为了替换单元格中可能存在的内容。
我一直在使用循环来实现这一目标,但是在有非常大的数据帧的情况下,我想避免这种情况,因此我正在寻找一种函数或其他方法来实现这一目标。
我期望的结果是:
df <- data.frame("F" = c("N°", "6", "6", "Total", "N°", "8", "8", "8", "8", "Total"), "N" = c("6", "123", "123", "123", "8", "123", "123", "123", "123", "123"))
答案 0 :(得分:1)
我们通过对F列中“ N”的出现创建一个分组列,方法是对逻辑向量('grp')进行累加,然后replace
将'F'中的'X'值N的first
元素,ungroup
并删除分组变量
library(dplyr)
df %>%
group_by(grp = cumsum(grepl("^N", F))) %>%
mutate(F = replace(as.character(F),
!F %in% c("N°", "Total"), first(as.character(N)))) %>%
ungroup %>%
select(-grp)
# A tibble: 10 x 2
# F N
# <chr> <fct>
# 1 N° 6
# 2 6 123
# 3 6 123
# 4 Total 123
# 5 N° 8
# 6 8 123
# 7 8 123
# 8 8 123
# 9 8 123
#10 Total 123