如果以范围格式给出,如何选择值?

时间:2015-07-07 12:05:45

标签: r

我有一个数据框,其中一列代表年龄。年龄值以间隔给出,如下表所示:

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

2 个答案:

答案 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