根据每个专业找到价值

时间:2017-02-03 19:51:18

标签: r

我有一个具有不同医学专业的数据集专栏,但专业重复,每行都有一个计数。我想对每个专业的值进行求和,并忽略小于10的行。如何在R中执行此操作?

对于Ex:

        Col1   Col2 
Internal Med     11
Internal Med     12
   Neurology      5
   Neurology     13
Internal Med      9

我应该Internal Med- 12 + 11(9被忽略)              Neurology- 13(5被忽略)

4 个答案:

答案 0 :(得分:1)

# method 1:
library(data.table)
setDT(df)[Col2 > 10, sum(Col2),by = .(Col1)]

# OR
# method 2
library(dplyr)
df %>% group_by(Col1) %>% 
       filter(Col2 > 10) %>% 
       summarise(sum(Col2))

#           Col1 `sum(Col2)`
# 1 Internal_Med          23
# 2    Neurology          13

答案 1 :(得分:0)

基于base的解决方案:

data <- data.frame(
Col1=c("IM", "IM", "N", "N", "IM"),
Col2=c(11, 12, 5, 13, 9)
)

# sums in groups
aggregate(data$Col2, by=list(data$Col1), FUN=sum)

# sums in groups for obs with Col2 >=10
aggregate(data$Col2[data$Col2>=10], by=list(data$Col1[data$Col2>=10]), FUN=sum)

(但我更喜欢dplyr

答案 2 :(得分:0)

使用base R

aggregate(Col2~Col1, subset(df, Col2 >= 10), sum)
#            Col1 Col2
#1   Internal Med   23
#2      Neurology   13

subdf <- subset(df, Col2 >= 10)
as.data.frame(Col2=tapply(subdf$Col2, subdf$Col1, sum))
#               Col2
# Internal Med   23
# Neurology      13

答案 3 :(得分:0)

最简单的方法是使用xtabs

xtabs( Col2 ~ Col1, df, subset = Col2>10 )