我一定错过了一些非常基本的东西。希望有人能指点一下。我正在尝试根据特定年份和性别对以下数据框进行子集化...
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")
制作自己的数据框,则子集工作正常。为什么代码会因我开始使用的数据而失败?
最佳答案
您获得 0 个结果的原因是您的 factor
列的水平被引用。例如,X.sex.
列级别不是 boy
或 girl
,而是 "boy"
和 “女孩”
。这可能是因为您从中导入 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],'"',""))
关于R子集函数返回零记录,原因不明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049428/