我有一个数据框,其中一列代表年龄。年龄值以间隔给出,如下表所示:
head(ddd)
country.of.birth age sex X2000 X2001 X2002 X2003 X2004 X2005 X2006 X2007
Afghanistan 0-4 men 0 0 1 2 2 0 1 1
Afghanistan 5-9 women 1 1 0 0 1 0 0 0
Afghanistan 10-14 men 0 2 5 2 3 4 1 1
Afghanistan 15-19 women 4 1 4 2 3 2 3 2
Afghanistan 20-24 men 5 0 8 7 7 3 5 3
Afghanistan 25-29 women 4 8 3 9 4 4 4 3
我应该使用什么命令来选择某个年龄段?我试过了:
sum(ddd[ddd$age == "20-24", 4:11])
获取年龄在20-24范围内的所有列的总和(应该给出38),我得到了这个错误:
Error in FUN(X[[i]], ...) :
only defined on a data frame with all numeric variables
答案 0 :(得分:3)
我认为这是尾随/前导空格的情况。我们可以从`stringr)
中删除str_trim
的尾随/前导空格
ddd$age[5] <- '20-29 '
sum(ddd[ddd$age == "20-29", 4:11])
#Error in FUN(X[[i]], ...) :
# only defined on a data frame with all numeric variables
library(stringr)
sum(ddd[str_trim(ddd$age)=='20-29', 4:11])
#[1] 38
或使用sub
ddd$age <- sub('^\\s*|\\s*$', '', ddd$age)
sum(ddd[str_trim(ddd$age)=='20-29', 4:11])
#[1] 38
如果您使用grep
,则可以避免此问题
sum(ddd[grep('20-29', ddd$age),4:11])
#[1] 38
答案 1 :(得分:0)
原因可能是某些列是因素
temp $ X2000&lt; - as.factor(temp $ X2000)
和(TEMP [温度$年龄== “20-24”,4:11])
FUN错误(X [[i]],...)
temp $ X2000&lt; - as.numeric(temp $ X2000)
和(TEMP [温度$年龄== “20-24”,4:11])
37