如何用另一行的值替换某些行的值?

时间:2019-05-07 10:41:29

标签: r dataframe replace

我有一个像这样的数据框:

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"))

1 个答案:

答案 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