R中如何基于另一dataframe的值替换指定行并保留原行顺序(优先dplyr)
解决方案(dplyr优先,保留原始行顺序)
首先加载dplyr包:
library(dplyr)
方法1:使用rows_update(推荐,语法简洁)
rows_update是dplyr专门用于行更新的函数,会自动匹配指定键列,仅更新匹配到的行的数值,完全保留原df1的行顺序:
# 从df2中筛选出含Total的行,作为更新数据源 df2_update <- df2 %>% filter(grepl("Total", Group)) # 执行更新,匹配键为Group列 df_result <- df1 %>% rows_update(df2_update, by = "Group")
方法2:使用mutate+条件判断(逻辑更直观)
如果希望显式控制每列的替换逻辑,可以用条件判断实现:
df_result <- df1 %>% mutate( # 检测当前行Group是否含Total,是则取df2对应行的Value1,否则保留原值 Value1 = if_else(grepl("Total", Group), df2$Value1[match(Group, df2$Group)], Value1), Value2 = if_else(grepl("Total", Group), df2$Value2[match(Group, df2$Group)], Value2) )
两种方法输出的df_result都和要求的df_desired完全一致,且不会改变原始行顺序。
内容的提问来源于stack exchange,提问作者Natasha R.
相关产品推荐
相关产品推荐

