在过去的一个小时里,我一直在努力工作,下面的代码在几个小时前就可以正常工作了,现在我不知道为什么现在不行了。我搜索了有关未定义的列选定错误的其他问题,但我想我已经更正了那些答案中的所有信息。我确定有一些小事我已经忽略或意外遗忘了,但我看不到!
我有一个既包含因子变量又包含数值变量的数据框,我想对其进行子集化,以便保留所有因子变量,并删除列均值<0.1的数值变量。
我在关于stackoverflow的另一个问题上找到了以下代码,对该问题进行了稍加修改就可以很好地在我的测试数据上工作(在较大的3GB对象上尝试代码之前,我正在使用较小的子数据集进行测试)
meanfunction01 <- function(x){
if(is.numeric(x)){
mean(x) > 0.1
} else {
TRUE}
}
#then apply function to data table
Zdata <- Data1[,sapply(Data1, meanfunction01)]
我发誓几个小时前我在使用它,然后当我回到它并尝试再次使用它时,它停止工作,现在只返回以下错误:
Error in `[.data.frame`(Data1, , sapply(Data1, meanfunction01)) :
undefined columns selected
我试图修改该函数,以使其遍历多个对象(我有54个对象要应用到该对象,并且不想手动键入所有对象),但是我不认为我进行了编辑原始功能,现在已停止工作。
我的数据的简短str():
> str(Data1[1:10])
'data.frame': 11 obs. of 10 variables:
$ Name : Factor w/ 11688 levels "GTEX-1117F-0226-SM-5GZZ7",..: 8186 8242 8262 8270 8343 8388 8403 8621 8689 8709 ...
$ SEX : Factor w/ 2 levels "Female","Male": 1 2 2 1 1 2 2 1 2 1 ...
$ AGE : Factor w/ 6 levels "20-29","30-39",..: 4 4 1 3 3 1 3 3 3 2 ...
$ CIRCUMSTANCES: Factor w/ 5 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Tissue.x : Factor w/ 53 levels "Adipose_Subcutaneous",..: 7 7 7 7 7 7 7 7 7 7 ...
$ ENSG00000223972.4 : num 0 0.0701 0.0339 0.1149 0.0549 ...
$ ENSG00000227232.4 : num 12.5 17.2 13.1 16 15.7 ...
$ ENSG00000243485.2 : num 0.0717 0 0.1508 0 0.061 ...
$ ENSG00000237613.2 : num 0 0.0654 0 0.0402 0.0768 ...
$ ENSG00000268020.2 : num 0 0.0421 0.0611 0 0 ...
答案 0 :(得分:1)
因此,如果唯一的问题是更改data.frame中的整数变量的类,但您有许多列(> 10000),则可能需要考虑将data.frame转换为data.table。您的代码将如下所示:
library(data.table)
Data1<-data.table(Data1) #or if you have your data in csv document just use fread instead of read.csv which will automatically give you a data.table.
然后,您只需要使用以下方法找到整数列:
which(sapply(Data1,is.integer))
使用data.table命令完全将其放入:
Data1[,which(sapply(Data1,is.integer)):=lapply(.SD,as.numeric),.SDcols=which(sapply(Data1,is.integer))]
请注意,由于data.table使用指针,因此不需要将上述代码行分配给任何内容,这使指针比data.frame或tibbles对象快得多。因此,运行上面的行将有效地更新您的Data1对象。其他非整数列的类别(即因素)将保持不变。
如果您还有其他问题,请进行更新,但这应该可以回答您的评论。祝你好运!