2017-08-25 44 views
-3

目前,我正在使用从SPSS文件导入的r数据集转换为csv。数据包括多种因素,如性别,种族和测试组,以及我想总结的一组权重。我想根据多个条件(即女性+白色+组1)对这些权重进行求和,因此我尝试对数据进行子集化。在R中设置数据将返回0列,619行

small.set<-subset(df, df[,"gender"]==1 & df[,"ethnicity"] ==1 & 
df[,"group"==1]) 

不过,我得到以下错误:

Error in matrix(unlist(value, recursive = FALSE, use.names = FALSE), nrow = nr, 
: 'data' must be of a vector type, was 'NULL' 

我发现,试图在任何情况下,选择组1时,R返回奇怪的结果:

df["group"==1] 
> data frame with 0 columns and 619 rows 

的结构“组”如下:

str(df["group") 
>Factor w/ 3 levels "1", "2", "3": 1 3 1 1 2... 

有谁知道是什么导致了这种情况发生?

+3

它更容易帮助你,如果你提供一个[重复的例子] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。你确定你的data.frame的列名是正确的吗(R区分大小写)? – MrFlick

+0

'“group”== 1'总是'FALSE'。也许你想'small.set [“group”] == 1'。 –

+0

在你的第一条指令中,你使用了两个带有'subset'的df。不要这样做。一次做一个。另外,对于'subset'你不需要重复df的名字,'gender == 1&group == 1'就可以。 –

回答

0

你为什么不使用aboid样品和直接使用:

small.set<-df[df$gender == 1 & df$ethnicity == 1 && df$group == 1,] 

另一个好方法是使用data.table包:

library(data.table) 

df<-data.table(df) 
small.set<-df[.(gender==1,ethnicity == 1,group == 1)]