[英]Reshape a data frame in R
I have a data frame that looks like 我有一个看起来像的数据框
F1 F2 Number
Banana Apple 9
Orange Banana 7
Apple Orange 8
Banana Orange 6
I need to convert this to 我需要将其转换为
Type F1 F2
Banana 15 7
Orange 7 14
Apple 8 9
Here's an approach: 这是一种方法:
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
where dat
is the name of your data frame. 其中dat
是数据框的名称。
This problem can also be tackled pretty easily with the "reshape2" package: 使用“ 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
However, it is also pretty easily tackled with base R: 但是,使用基数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
In cases where your data are already long, as they are in your comment , it is even more straightforward: 如果您的数据已经很长(如注释中的数据) ,则更加简单:
xtabs(Number ~ Date + Type, mydf)
# Type
# Date M1 M2
# 01/01/14 9 7
# 01/02/14 8 6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.