2014-11-12 5 views
0

Я очень новичок в R, и это мой первый вопрос переполнения стека, поэтому я ожидаю, что это может быть немного грубо. У меня есть кадр данных (из .csv) в следующем составе:суммарная сумма счетчиков по коэффициенту в R

FeatureName  Uuid  Count 

ClickHeadline ABC1  17 
ChangeSetting ABC1  3 
ClickHeadline CBA2  5 
ChangeSetting CBA2  7 
SomethingElse CBA2  5 

Я пытаюсь выяснить, как сделать новый кадр данных, в котором уникальные значения FeatureName, факторы ClickHeadline, ChangeSetting, SomethingElse теперь являются суммированием переменных по графу для каждого Uuid. Таким образом, новый кадр данных, я хочу бы:

Uuid ClickHeadline ChangeSetting SomethingElse 
ABC1 17    3    0 
CBA2 5    7    5 

Я чувствую, что я должен быть в состоянии сделать это по агрегатной функции, но я не могу понять, как сказать ему, чтобы посмотреть сумму по пунктам от Переменная. Я знаю, что у меня все в порядке, но может кто-нибудь помочь мне понять это?

ответ

1

Есть много возможностей

Если вам требуется sum вы можете также использовать функцию

df <- read.table(header=T, text=' 
       FeatureName  Uuid  Count 

ClickHeadline ABC1  17 
ChangeSetting ABC1  3 
ClickHeadline CBA2  5 
ChangeSetting CBA2  7 
SomethingElse CBA2  5 
       ') 

library(reshape2) 
dcast(df, Uuid ~ FeatureName, value.var="Count", sum) 

    Uuid ChangeSetting ClickHeadline SomethingElse 
1 ABC1    3   17    0 
2 CBA2    7    5    5 

reshape2 пакет dcast Если набор данных ограничен объем предоставленных вами вы можете просто использовать базу reshape функция

out <- reshape(df, idvar="Uuid", timevar="FeatureName", v.names="Count", direction="wide") 
out[is.na(out)] = 0 
out 
    Uuid Count.ClickHeadline Count.ChangeSetting Count.SomethingElse 
1 ABC1     17     3     0 
3 CBA2     5     7     5 

Другая альтернатива для базы R xtabs w ез необходимо для удаления NA

xtabs(Count ~ Uuid+FeatureName, df) 
     FeatureName 
Uuid ChangeSetting ClickHeadline SomethingElse 
    ABC1    3   17    0 
    CBA2    7    5    5 

tidyr пакетного решения с spread

library(tidyr) 
spread(df, key=FeatureName, value=Count, fill=0) 
    Uuid ChangeSetting ClickHeadline SomethingElse 
1 ABC1    3   17    0 
2 CBA2    7    5    5 
+0

Рад, что помог, если у вас есть ответ, пожалуйста, примите его, если вам нужно что-то дополнительно. – cdeterman

+0

Спасибо! Я также получил что-то, используя tapply: df_new = tapply (df $ Count, df [, c ("Uuid", "FeatureName")], sum) – steeles

Смежные вопросы