寻求dplyr中按行号修改tibble指定行的标准实现方法
使用dplyr按行号修改tibble指定列的方法
刚好之前也处理过类似的需求,用dplyr实现按行号修改指定列的操作其实有几种很顺手的方式,对应你给出的base R代码,我整理了几个常用的方案:
方法1:mutate() + case_when()
这种方法逻辑清晰,适合需要多条件判断的场景,哪怕后续要扩展修改规则也很方便:
library(dplyr) # 构造初始数据 DF <- tibble(x = 5:1) idx <- c(2L, 4L) # 按行号修改指定列为NA DF %>% mutate(x = case_when( row_number() %in% idx ~ NA_integer_, TRUE ~ x # 其他行保留原数值 ))
方法2:mutate() + if_else()
如果只有“修改/不修改”两种情况,用if_else()会更简洁:
DF %>% mutate(x = if_else(row_number() %in% idx, NA_integer_, x))
方法3:mutate() + replace()
这个写法和你给出的base R代码逻辑最接近,直接对目标列的指定位置进行替换:
DF %>% mutate(x = replace(x, row_number() %in% idx, NA_integer_))
以上三种方法都能得到和base R代码完全一致的结果:
# A tibble: 5 × 1 x <int> 1 5 2 NA 3 3 4 NA 5 1
需要注意的是,NA_integer_要和列的整数类型匹配,如果列是其他类型(比如字符型),要换成对应的NA_character_或者NA_real_,避免类型不兼容的问题。
内容的提问来源于stack exchange,提问作者jangorecki
相关产品推荐
相关产品推荐

