首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何选择一个值,如果它是给出的范围格式?

如何选择一个值,如果它是给出的范围格式?
EN

Stack Overflow用户
提问于 2015-07-07 12:05:45
回答 2查看 55关注 0票数 1

我有一个数据框架,其中一个列代表年龄。如下表所示,年龄值作为间隔计算:

代码语言:javascript
复制
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

我应该使用什么命令来选择一个特定的年龄范围?我试过:

代码语言:javascript
复制
sum(ddd[ddd$age == "20-24", 4:11])

为了得到年龄在20-24岁之间的所有列的总和(应该给出38),我得到了以下错误:

代码语言:javascript
复制
Error in FUN(X[[i]], ...) : 
only defined on a data frame with all numeric variables
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 12:17:33

我认为这是一个尾随/前导空间的情况。我们可以从“str_trim”中移除尾部/前导空格(使用)

代码语言:javascript
复制
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

代码语言:javascript
复制
 ddd$age <- sub('^\\s*|\\s*$', '', ddd$age)
 sum(ddd[str_trim(ddd$age)=='20-29', 4:11])
 #[1] 38

如果使用grep,则可以避免此问题。

代码语言:javascript
复制
 sum(ddd[grep('20-29', ddd$age),4:11])
 #[1] 38
票数 3
EN

Stack Overflow用户

发布于 2015-07-07 12:26:22

原因可能是某些列是

临时$X 2000 <- as.factor(临时$X 2000)

(temptemp$age==“20-24”,4:11)

乐趣中的错误(X[i],.)

临时$X 2000 <- as.numeric(临时$X 2000)

(temptemp$age==“20-24”,4:11)

37

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31268120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档