我有一个包含不同医学专科的数据集列,但是专科重复,并且每一行都有一个计数。我想要对每个专业的值求和,并忽略小于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被忽略)
发布于 2017-02-04 03:55:28
# 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发布于 2017-02-04 04:29:45
基于purly 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)
发布于 2017-02-04 04:34:25
使用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 13https://stackoverflow.com/questions/42031996
复制相似问题