r - R:如何更改通过 for 循环中的变量创建的数据框的单元格值
问题描述
我需要更新通过 for 循环中的变量创建的数据框的单元格值
创建大法框架
df <- data.frame(
col1 = c(rep(1,9)),
col2 = c(rep(2,9)),
col3= c(rep(3, 9))
)
df
col1 col2 col3
1 1 2 3
2 1 2 3
3 1 2 3
4 1 2 3
5 1 2 3
6 1 2 3
7 1 2 3
8 1 2 3
9 1 2 3
拆分为 3 个数据帧,即 df1,df2,df3 实际数据集更复杂,但是,目标是在 for 循环中更新拆分数据帧,即 df1-3。这是因为我的数据集非常大。
我尝试了注释的代码行,但它给了我一个新变量,粘贴函数中的相应名称为它分配了一个值 0
for(i in seq(1,3,1)){
if (i == 1) {
assign(paste0("df",i),df[1:3,])
#assign(paste0("df",i,"$col2[1]"),0)
}
if (i == 2 ){
assign(paste0("df",i),df[4:6,])
#assign(paste0("df",i,"$col2[1]"),0)
}
if (i == 3 ){
assign(paste0("df",i),df[7:9,])
#assign(paste0("df",i,"$col2[1]"),0)
}
}
df1
col1 col2 col3
1 1 2 3
2 1 2 3
3 1 2 3
预期输出 我需要使用 for 循环将每个拆分数据帧的 col2 中的第一行更新为 0。
df1
col1 col2 col3
1 1 0 3
2 1 2 3
3 1 2 3
Same for df2 and df3
解决方案
我可以提供一种替代方法吗?与其创建几个不同的 data.frame,不如创建一个 data.frame 列表(使用split
)。然后您可以使用lapply
在每个数据框元素中进行相同的更改:
lapply(split(df,paste0("df",rep(1:3,each=3))),function(x) {x[1,2]<-0;x})
$df1
col1 col2 col3
1 1 0 3
2 1 2 3
3 1 2 3
$df2
col1 col2 col3
4 1 0 3
5 1 2 3
6 1 2 3
$df3
col1 col2 col3
7 1 0 3
8 1 2 3
9 1 2 3
如果出于某种原因,您绝对坚持从 for 循环开始创建数据帧(我强烈建议不要这样做),那么您可以使用 将它们全部放入一个列表中lapply(paste0("df",1:3),get)
,并用lapply
我上面建议的方法将其包装起来,以得到相同的结果(但没有列表中每个数据框的有用元素名称)。
推荐阅读
- android - 在 Android Xamarin Forms 中压缩视频时出现视频转码器问题
- javascript - Node.js 为什么 RegExp() 用 \ 抛出错误?
- mysql - embulk - communication_link_failure
- c - 井字游戏使用 C
- mongodb - MongoDB $sort 没有给出预期的结果
- javascript - 为不包含未定义值的 Object.entries 定义 Typescript 类型?
- javascript - 通过 AJAX 提交表单后使用 Uppy 上传文件
- javascript - 如何在所有页面上显示 cookie
- java - 在 Azure 应用服务(Spring 启动应用程序)中启用自定义错误消息
- javascript - 在表单域中使用变量