R子集函数返回零记录,原因不明

标签 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") 制作自己的数据框,则子集工作正常。为什么代码会因我开始使用的数据而失败?

最佳答案

您获得 0 个结果的原因是您的 factor 列的水平被引用。例如,X.sex. 列级别不是 boygirl,而是 "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/

相关文章:

r - 通过 devtools install_github 安装 r 包时出现问题

r - 计数数据帧中的非NA得到答案作为向量

r - Julia 相当于 dplyr 的 bind_cols 和 bind_rows

r - 如何在for循环中验证条件

r - tidyr::收集不同类型的多列

r - 如何让main函数环境固定为 "anchor"?

r - mgcv:如何使用 Tweedie 响应模型进行逐步回归?

r - 如何简单而高效地编写二次形式的代码

r - ggplot2, R 中的单条柱状图

html - 将 HTML/XML PDF 文件格式读入 R