2017-02-03 3 views
1

У меня есть колонка набора данных с различными специальностями для медицины, но специальности повторяются, и для каждой строки есть счет. Я хочу суммировать значения для каждой специальности, а также игнорировать строки с числом менее 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 игнорируется)

ответ

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

дина- 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) 
Смежные вопросы