【发布时间】:2015-06-26 00:14:06
【问题描述】:
我有一个数据框,其格式与下面给出的示例数据框 df1 非常相似。共有三列:两个分类变量和一个“计数”列,指定具有该特定组合的对象数量。
我想将此数据框移动到示例数据框 df2 中显示的格式。每个对象都简单地在单独的行上给出,而不是“计数”列。
我已经尝试过使用 dplyr 和 tidyr 软件包,但我还不太精通 R。什么是执行我想要的功能的好方法?
set.seed(1)
x1 <- c("Pants", "Shoes", "Scarf")
x2 <- c("Ugly", "Beautiful")
x3 <- sample(1:10, size=6, replace=T)
df1 <- data.frame(Object=rep(x1, 2),
Quality=rep(x2, each=3),
Count=x3);
df1; sum(df1[,3])
df2 <- data.frame(Object=c(rep("Pants", 3), rep("Shoes", 4), rep("Scarf", 6),
rep("Pants", 10), rep("Shoes", 3), rep("Scarf", 9)),
Quality=c(rep("Ugly", 3), rep("Ugly", 4), rep("Ugly", 6),
rep("Beautiful", 10), rep("Beautiful", 3),
rep("Beautiful", 9))
)
head(df2); tail(df2)
【问题讨论】:
-
你可以使用
base R即df1[rep(1:nrow(df1), df1$Count),-3] -
谢谢!这就是我一直在寻找的,虽然我更喜欢 Ananda 的解决方案,因为这样更容易阅读代码。
-
当然,@akrun 的建议几乎与
expandRows中的内容完全相同,但expandRows的创建更加通用。