由于无法解释的原因,R子集函数返回零记录

时间:2014-11-20 20:57:10

标签: r

我必须遗漏一些非常基本的东西。希望有人能指出来。我正在尝试根据特定的年份和性别对以下数据框进行分组......

str(Bnames)
'data.frame':   258000 obs. of  4 variables:
 $ X.year.   : int  1880 1880 1880 1880 1880 1880 1880 1880 1880 1880 ...
 $ X.name.   : Factor w/ 6782 levels "\"Aaden\"","\"Aaliyah\"",..: 3380 6632 3125 1174 2554 2449 3428 6232 2834 5517 ...
 $ X.percent.: num  0.0815 0.0805 0.0501 0.0452 0.0433 ...
 $ X.sex.    : Factor w/ 2 levels "\"boy\"","\"girl\"": 1 1 1 1 1 1 1 1 1 1 ...

我输入的代码是

one <- subset(Bnames, X.year.==2008 & X.sex.=="boy") # I get zero rows returned

two<- subset(Bnames, X.year.==2008) # I get 2000 rows returned, which is correct

three <- subset(Bnames, X.sex.=="boy") # I get 0 rows returned

four <- subset(Bnames, X.name.=="John") # I get 0 rows returned

我不明白。我正在使用http://plyr.had.co.nz/09-user/

免费提供的数据集

如果我通过c("boy","girl")的重复采样来创建自己的数据帧,则该子集工作正常。为什么代码失败了我开始使用的数据?

1 个答案:

答案 0 :(得分:2)

您获得0结果的原因是引用了factor列的级别。例如,X.sex.列级别不是boygirl,而是"boy""girl"。这可能是因为您从data.frame导入的文件已引用了字段,并且通过read.table(或其他等效函数)使用quote=FALSE参数读取了该文件。如果是这种情况,您可以轻松地重新读取该文件并更正这个相当烦人的功能。

无论如何,要正确配置您的data.frame,请记住引号。例如:

 one <- subset(Bnames, X.year.==2008 & X.sex.=="\"boy\"")

或者,您可以使用'作为引用:

 one <- subset(Bnames, X.year.==2008 & X.sex.=='"boy"')

如果您想在不重建data.frame的情况下摆脱恼人的报价,请尝试:

 Bnames[,4]<-factor(gsub(Bnames[,4],'"',""))