我必须遗漏一些非常基本的东西。希望有人能指出来。我正在尝试根据特定的年份和性别对以下数据框进行分组......
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 :(得分:2)
您获得0结果的原因是引用了factor
列的级别。例如,X.sex.
列级别不是boy
或girl
,而是"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],'"',""))