У меня есть кадр данных, который выглядит какПереформуйте кадр данных в R
F1 F2 Number
Banana Apple 9
Orange Banana 7
Apple Orange 8
Banana Orange 6
Мне нужно преобразовать это
Type F1 F2
Banana 15 7
Orange 7 14
Apple 8 9
У меня есть кадр данных, который выглядит какПереформуйте кадр данных в R
F1 F2 Number
Banana Apple 9
Orange Banana 7
Apple Orange 8
Banana Orange 6
Мне нужно преобразовать это
Type F1 F2
Banana 15 7
Orange 7 14
Apple 8 9
Вот подход:
setNames(merge(aggregate(Number ~ F1, dat, sum),
aggregate(Number ~ F2, dat, sum),
by.x = "F1", by.y = "F2", all = TRUE),
c("Type", "F1", "F2"))
# Type F1 F2
# 1 Apple 8 9
# 2 Banana 15 7
# 3 Orange 7 14
где dat
это имя вашего фрейма данных.
Что делать, если у меня есть различное количество строк? В F1, три вида и F2, четыре вида. – BigDataScientist
@ user2684128 См. Обновление. Теперь он работает, даже если существует различное количество строк. –
Отлично! Большое спасибо – BigDataScientist
Эта проблема также может быть решена довольно легко с "reshape2" пакет:
library(reshape2)
x <- melt(mydf, id.vars="Number")
dcast(x, value ~ variable, value.var="Number", fun.aggregate=sum)
# value F1 F2
# 1 Apple 8 9
# 2 Banana 15 7
# 3 Orange 7 14
Тем не менее, это также довольно легко захваченным с основанием R:
xtabs(Number ~ values + ind,
cbind(mydf["Number"],
stack(mydf[setdiff(names(mydf), "Number")])))
# ind
# values F1 F2
# Apple 8 9
# Banana 15 7
# Orange 7 14
В тех случаях, где ваши данные уже являются длинными, так как они находятся в your comment, это еще более прямолинейно:
xtabs(Number ~ Date + Type, mydf)
# Type
# Date M1 M2
# 01/01/14 9 7
# 01/02/14 8 6
Номера не складываются ... – PascalVKooten