Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R subset函数返回零记录,原因不明_R - Fatal编程技术网

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

R subset函数返回零记录,原因不明,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\"",..:

我一定错过了一些非常基本的东西。希望有人能指出这一点。我试图根据特定年份和性别对以下数据框进行子集划分

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

one您得到0结果的原因是您的
因子
列的级别被引用。例如,
X.sex.
列级别不是
boy
girl
,而是
“boy”
“girl”
。这可能是因为您从导入的
数据.frame
文件中引用了字段,并且它是通过
read.table
(或其他等效函数)使用
quote=FALSE
参数读取的。如果是这样的话,您可以轻松地重新读取该文件并更正这个相当烦人的特性

无论如何,要正确地子集您的
数据.frame
请记住引号。例如:

 one <- subset(Bnames, X.year.==2008 & X.sex.=="\"boy\"")
如果您想在不必重新生成
data.frame
的情况下摆脱恼人的引号,请尝试:

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

Bnames[,4]似乎引用了你的因子列的级别:例如
X.sex.
列没有
男孩
女孩
级别,而是
男孩
女孩
。试试:
one@nicola:你应该把它作为答案发布。@bondedust作为答案发布。谢谢。你可以通过键入
nchar(“\'boy\”)
来检查nicola诊断的准确性。这是有效的,但我必须移动Bnames,如下图所示。。。Bnames[,4]
 Bnames[,4]<-factor(gsub(Bnames[,4],'"',""))