2017-02-14 10 views
-1

Используя эти данные:Сумма положительных и отрицательных значений, сгруппированных другими значениями

Respon Type  Value 
    Mark  -1  2 
    Mark  -2  4 
    Sheyla 1  10 
    Ana  1  4 
    Sheyla 2  3 
    Mark  1  4 
    Ana  -2  6 
    Ana  2  7 

Я хотел бы получить две колонки под названием «положительные» и «отрицательные» Wich суммы положительных и отрицательных значений в зависимости от типа и сгруппированных по Respon

Respon Positive  Negative 
Mark   4   6 
Sheyla  13   0 
Ana   11   6   

Спасибо заранее,

+0

в базовом R: 'Reshape (совокупная стоимость (~ Respon знак + (тип), DF, ПОТЕХИ = "сумма"), idvar = "Respon", timevar = "знак (тип)", направление = "широкий") ' –

ответ

1

Мы можем использовать

library(dplyr) 
df1 %>% 
    group_by(Respon) %>% 
    summarise(Positive = sum(Value[Type>0]), Negative = sum(Value[Type <0])) 
# A tibble: 3 × 3 
# Respon Positive Negative 
# <chr> <int> <int> 
#1 Ana  11  6 
#2 Mark  4  6 
#3 Sheyla  13  0 

Или с помощью data.table

library(data.table) 
dcast(setDT(df1), Respon ~ sign(Type), value.var = "Value", sum) 
0

С базой R xtabs мы можем сгруппировать Value на Respon и подписанная Type переменную.

xtabs(Value~Respon + sign(Type), df) 

#  sign(Type) 
# Respon -1 1 
# Ana  6 11 
# Mark  6 4 
# Sheyla 0 13