给定一个如下所示的虚拟数据框:
Data1<-rnorm(20, mean=20)
Data2<-rnorm(20, mean=21)
Data3<-rnorm(20, mean=22)
Data4<-rnorm(20, mean=19)
Data5<-rnorm(20, mean=20)
Data6<-rnorm(20, mean=23)
Data7<-rnorm(20, mean=21)
Data8<-rnorm(20, mean=25)
Index<-rnorm(20,mean=5)
DF<-data.frame(Data1,Data2,Data3,Data4,Data5,Data6,Data7,Data8,Index)
我想做的是根据索引列删除(使 NA)每行的某些列。我走了很长一段路,这样做是为了让您了解我正在尝试做的事情:
DF[DF$Index>5.0,8]<-NA
DF[DF$Index>=4.5 & DF$Index<=5.0,7:8]<-NA
DF[DF$Index>=4.0 & DF$Index<=4.5,6:8]<-NA
DF[DF$Index>=3.5 & DF$Index<=4.0,5:8]<-NA
DF[DF$Index>=3.0 & DF$Index<=3.5,4:8]<-NA
DF[DF$Index>=2.5 & DF$Index<=3.0,3:8]<-NA
DF[DF$Index>=2.0 & DF$Index<=2.5,2:8]<-NA
DF[DF$Index<=2.0,1:8]<-NA
这工作正常,但不是很适应。如果列数发生变化,或者我需要调整条件语句,那么重写整个代码会很痛苦(实际数据集要大得多)。
我想做的是能够定义一些变量,然后运行某种循环或应用来完全按照上面的代码行所做的。
例如,为了复制我的长代码,类似于这种逻辑:
NumCol<-8
Max<-5
Min<-2.0
if index > Max, then drop NumCol
if index >= (Max-0.5) & <=Max, than drop NumCol:(NumCol -1)
repeat until reach Min
我不知道这是否是 R 中最合乎逻辑的推理方式,而且我对循环和应用程序非常糟糕,所以我愿意接受任何可以复制上述长行代码并能够调整上述变量。