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。

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个变量中的几个,因此在宽和长之间来回切换,然后从长到宽(可能多次(似乎很麻烦,而且容易出错。因此,我想出了这个:

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])
}

看起来工作得很好,但是,我不确定这是否是最有效的编码方式。

最新更新