我有一个具有不同医学专业的数据集专栏,但专业重复,每行都有一个计数。我想对每个专业的值进行求和,并忽略小于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被忽略)
答案 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 )