R语言tidyverse如何修改tibble指定行列位置的数值
问题描述
我有如下数据框:
df = data.frame(col1=1:4, col2 = 5:8, col3 = 9:12)
需求是将第2行col2列对应的数值修改为44。
在base R中我可以直接运行df["2","col2"] = 44实现该操作,请问在tidyverse中如何实现相同效果?
base R完整测试代码:
df = data.frame(col1=1:4, col2 = 5:8, col3 = 9:12) df df["2","col2"]=44 df
代码运行效果:
解答
你可以使用tidyverse核心包dplyr的链式操作实现同等修改效果,步骤如下:
- 首先加载tidyverse包
library(tidyverse)
- 通过
mutate()修改列值,配合row_number()定位到第2行完成替换:
df <- df %>% mutate(col2 = ifelse(row_number() == 2, 44, col2))
运行后df的第2行col2值就会被修改为44,和base R的操作结果完全一致。
补充说明:
如果你的数据已经是tidyverse默认的tibble格式,也支持和base R完全相同的
[行索引,列名]直接赋值写法,但这种方式不符合tidyverse提倡的链式操作逻辑,更推荐使用上面的mutate写法。如果需要批量按匹配规则改值,也可以使用rows_update()函数完成。
内容的提问来源于stack exchange,提问作者frank
相关产品推荐
相关产品推荐

