首页 > 解决方案 > 如何用另一行的值替换某些行的值?

问题描述

我有一个这样的数据框:

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

标签: rdataframereplace

解决方案


我们通过逻辑向量('grp')的累积和,然后replace'F'中的'X'值与first'N'的元素,ungroup并根据F列中“N”的出现创建一个分组列,删除分组变量

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  

推荐阅读