在R语言中如何用索引列表批量将数据框指定位置设为0
一行代码实现指定位置替换为0
当然可以!用一行代码就能搞定这个需求,咱们结合purrr包的map2_df函数就能完美实现,刚好适配你的tibble和索引列表结构。
先构造示例数据(方便你复现验证)
library(tibble) library(purrr) # 构建题目中的11行3列tibble df <- tibble( A = c(1724, 1758, 1612, 1692, 1260, 1157, 1359, 1414, 387, 374, NA), B = c(4, 4, 3, 3, 33, 22, 63, 27, 3, 3, NA), C = c(2013, 2013, 2013, 2013, 2014, 2014, 2014, 2014, 2016, 2016, NA) ) # 构建题目中的索引列表L L <- list( c(3, 4), # 对应列A的第3、4行 1:5, # 对应列B的第1-5行 1 # 对应列C的第1行 )
核心一行代码
df <- map2_df(df, L, ~ replace(.x, .y, 0))
代码解释
map2_df会自动把df的每一列和L中对应的索引组一一配对处理~ replace(.x, .y, 0)是处理逻辑:对当前列(.x),把.y指定的行位置的数值替换为0- 执行后直接赋值回
df,就完成了所有指定位置的替换
验证结果
运行代码后查看df,会看到:
# A tibble: 11 × 3 A B C <dbl> <dbl> <dbl> 1 1724 0 0 2 1758 0 2013 3 0 0 2013 4 0 0 2013 5 1260 0 2014 6 1157 22 2014 7 1359 63 2014 8 1414 27 2014 9 387 3 2016 10 374 3 2016 11 NA NA NA
完全符合你要求的替换规则。
内容的提问来源于stack exchange,提问作者Omry Atia
相关产品推荐
相关产品推荐

