r - R:创建不同数量的赋值语句的最佳方法
问题描述
我有一个必须定期运行的脚本,我在 R 中使用不同数量的赋值语句,如下所示:
r5$NWord_1<-ifelse(r5$Match==1,NA,r5$NWord_1)
r5$NWord_2<-ifelse(r5$Match==2,NA,r5$NWord_2)
r5$NWord_3<-ifelse(r5$Match==3,NA,r5$NWord_3)
r5$NWord_4<-ifelse(r5$Match==4,NA,r5$NWord_4)
r5$NWord_5<-ifelse(r5$Match==5,NA,r5$NWord_5)
r5$NWord_6<-ifelse(r5$Match==6,NA,r5$NWord_6)
r5$NWord_7<-ifelse(r5$Match==7,NA,r5$NWord_7)
问题是“NWord”变量的数量从运行到运行通常在 5 到 7 之间变化)。我将“NWord”变量的数量单独存储为大小。
Size<-5
我尝试了以下方法,但 get() 仅适用于对象,而不适用于数据框列。
for(i in 1:Size){
get(paste("r5$NWord_",i,sep=""))<-ifelse(r5$Match==i,NA,get(paste("r5$NWord_",i,sep="")))
}
我很好奇:自动化这个过程的最佳方法是什么,所以我不必每次都手动运行这些语句的子集?
解决方案
对于那些感兴趣的人:1)导入数据是宽格式的(这是系统允许我下载的)。2) 导出数据必须是宽格式才能上传到系统。由于这些只是数据集中大约 200 个变量中的一小部分,因此在 Wide 和 long 之间来回切换,然后 long 回到 Wide (可能多次)似乎很麻烦并且容易出错。因此,我想出了这个:
idx1<-which(colnames(r5)=="NWord_1")
idx2<-which(colnames(r5)==paste("NWord_",Size,sep=""))
for(i in idx1:idx2){
r5[,i]<-ifelse(r5$Match==1,NA,r5[,i])
}
似乎工作得很好,但是,我不确定这是最有效的编码方式。
推荐阅读
- swift - Apple 的“Swift-Format”与 Nick Lockwood 的“SwiftFormat”
- javascript - 每次运行该钩子时,是否会重新定义“useEffect”钩子中定义的函数?
- python - 我正在尝试创建一个随机杂务生成器,但它似乎无法正确打印
- excel - Excel UDF 函数未更新
- javascript - 巧合排序arraylist搜索
- node.js - 远程服务器 (AWS) 中的映射路径
- php - 在php中将数组转换为矩阵
- node.js - 如何更改节点搜索 package.json 的路径?
- mysql - DataGridView 中的 SQL 到 MySQL
- python - 在机器学习中创建具有多个目标分类数据的模型