2017-02-03 49 views
1

我有一個數據集列與不同的醫學專業,但專業重複和每一行都有一個計數。我想總結每個專業的值,並忽略小於10的行。我如何在R中執行此操作?每個專業尋找值

對於防爆:

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

我應該得到Internal Med- 12 + 11(9忽略) Neurology- 13(5忽略)

回答

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 
+0

什麼是%>%?我很困惑,我應該使用第一種方法還是第二種方法? – kobe2792

+0

@RikinMathur它的一個操作符...方法中的任何一個 –

+0

謝謝,但它說錯誤:找不到函數「%>%」 – kobe2792

0

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

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 
0

最簡單的將使用xtabs

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