首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中的多重条件求和

R中的多重条件求和
EN

Stack Overflow用户
提问于 2016-02-14 19:34:00
回答 2查看 1.9K关注 0票数 1

我试图将第4栏(儿童)、第5栏(成人)和第6栏(老年人)相加,并按年份计算每个国家的返回值,而不考虑第3栏(性别)。通过各种论坛阅读,我无法将以下几点结合起来:

代码语言:javascript
复制
 country      year   sex  child adult elderly
1 Afghanistan 1995   male    -1    -1      -1
2 Afghanistan 1996 female    -1    -1      -1
3 Afghanistan 1996   male    -1    -1      -1
4 Afghanistan 1997 female     5    96       1
5 Afghanistan 1997   male     0    26       0
6 Afghanistan 1998 female    45  1142      20

我能够逐行对这3列进行求和,并用以下内容创建一个单独的列,但仍然需要将每个国家的男女行结合起来:

代码语言:javascript
复制
tuberculosiscases <-tuberculosis$child + tuberculosis$adult + tuberculosis$elderly
names(tuberculosiscases) <- c("tuberculosiscases")
tuberculosis <- data.frame(tuberculosis,tuberculosiscases)
head(tuberculosis)

   country    year   sex child adult elderly  tuberculosiscases
1 Afghanistan 1995   male    -1    -1      -1                -3
2 Afghanistan 1996 female    -1    -1      -1                -3
3 Afghanistan 1996   male    -1    -1      -1                -3
4 Afghanistan 1997 female     5    96       1               102
5 Afghanistan 1997   male     0    26       0                26
6 Afghanistan 1998 female    45  1142      20              1207
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-14 20:15:13

如果您想要将该总和添加到您的数据中,请有以下几个选项:

代码语言:javascript
复制
# with base R (1)
transform(dat, tuber.sum = ave(tuberculosiscases, country, year, FUN = sum))

# with base R (2)
dat$tuber.sum <- ave(dat$tuberculosiscases, dat$country, dat$year, FUN = sum))

# with the data.table package
library(data.table)
setDT(dat)[, tuber.sum:=sum(tuberculosiscases), by= .(country, year)]

# with the plyr package
library(plyr)
dat <- ddply(dat, .(country, year), transform, tuber.sum=sum(tuberculosiscases))

# with the dplyr package
library(dplyr)
dat <- dat %>% 
  group_by(country, year) %>% 
  mutate(tuber.sum=sum(tuberculosiscases))

所有人都给予:

代码语言:javascript
复制
> dat
       country year    sex child adult elderly tuberculosiscases tuber.sum
1: Afghanistan 1995   male    -1    -1      -1                -3        -3
2: Afghanistan 1996 female    -1    -1      -1                -3        -6
3: Afghanistan 1996   male    -1    -1      -1                -3        -6
4: Afghanistan 1997 female     5    96       1               102       128
5: Afghanistan 1997   male     0    26       0                26       128
6: Afghanistan 1998 female    45  1142      20              1207      1207
票数 1
EN

Stack Overflow用户

发布于 2016-02-14 20:32:39

如果我正确地理解了您的问题,并假设初始data.frame的名称是my_df,我将使用聚合:

代码语言:javascript
复制
 aggdata <-aggregate(my_df[,c("child", "adult", "elderly")], 
                     by=list(my_df$country,my_df$year), FUN=sum, na.rm=TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35397126

复制
相关文章

相似问题

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