Итак, у меня есть процесс, для которого я сейчас использую Excel, и я хочу найти наиболее эффективный способ сделать это в R.
Мои данные принимают эту форму:
ID <- c(rep(1, 3), rep(2, 3))
Source <- rep(c("A", "A", "B"), 2)
Total <- c(11, 13, 12, 25, 27, 26)
Actions <- c(3, 2, 3, 8, 9, 10)
df <- data.frame(ID, Source, Total, Actions)
df
# ID Source Total Actions
# 1 1 A 11 3
# 2 1 A 13 2
# 3 1 B 12 3
# 4 2 A 25 8
# 5 2 A 27 9
# 6 2 B 26 10
Я запускаю агрегат на Total
и Actions
:
df2 <- aggregate(cbind(Total, Actions) ~ ID + Source,
data = df, FUN=sum)
df2
# ID Source Total Actions
# 1 1 A 24 5
# 2 2 A 52 17
# 3 1 B 12 3
# 4 2 B 26 10
Но что я действительно хочу, так это ситуация, когда итоговые значения для A и итоговые значения для B являются отдельными столбцами в одной таблице. В настоящее время я делаю это так:
df2_A <- df2[(df2$Source == "A"), ]
df2_B <- df2[(df2$Source == "B"), ]
x <- merge(df2_A, df2_B, by.x = "ID", by.y = "ID")
x
# ID Source.x Total.x Actions.x Source.y Total.y Actions.y
# 1 1 A 24 5 B 12 3
# 2 2 A 52 17 B 26 10
У меня вопрос: есть ли более элегантный способ перейти от df
до x
за один шаг? Я чувствую, что то, что я делаю сейчас, - грубый хак, и я хочу расширить свои знания R.