如何在R中扩展数据帧


15

我在用R做一些分析时遇到以下问题。

我有一个这样的数据框:

Name | Group | Count
Person 1 | A | 3
Person 2 | A | 1
Person 3 | A | 0
Person 1 | B | 5 
Person 2 | B | 0
Person 3 | B | 1
Person 1 | C | 1

并且我需要“扩展”它(不确定是否使用正确的术语),如下所示:

Person 1 | A
Person 1 | A
Person 1 | A
Person 2 | A
Person 1 | B
Person 1 | B

等等

因此,它取值对Person 1和A(在此示例中为3),并与Person 1和A进行三行,并且对每个Person-Group-组合都这样做。无法找出任何网上搜索的好话。


尝试使用该reshape()功能
访客

您应该reshape2在R中探索该包。它可能还会有助于dput2个示例数据帧:一个带有输入,另一个带有输出。
Zach 2012年

我提供了一个答案,但我想这更多是R编程问题,而不是统计问题,因此也许应该将其迁移到其他地方。
盛大晚会

感谢Gaël的回答,并帮助解决了我的问题中的格式问题。
Juha-Matti S.

Answers:


10

尽管这是一个非常有用的软件包,但我认为在这种情况下重塑是过大的, rep可以胜任。

以下是一些示例数据:

df <- data.frame(
     name=c("Person 1", "Person 2", "Person 3", "Person 1", "Person 2", "Person 3"),
     group=c("A", "A", "A", "B", "B", "B"),
     count=c(3,1,0,5,0,1))

现在,“扩展”它:

expanded <- data.frame(name = rep(df$name, df$count),
                       group = rep(df$group, df$count))

我找不到直接在头顶数据框上工作的方法,因此我分别处理每个变量,然后重新组装它们,虽然有点难看,但只要您始终使用即可,就可以了计数的变量相同。


7
怎么样:df[rep(seq_len(nrow(df)), df$count), 1:2]
chl 2012年

@chl,您的先生真棒!
克里斯(Chris)

15

您可以使用reshape包中的untable函数。

鉴于以上df(@GaëlLaurans提供)

library(reshape)

expanded<-untable(df[,c(1,2)], num=df[,3])

name group
1   Person 1     A
1.1 Person 1     A
1.2 Person 1     A
2   Person 2     A
4   Person 1     B
4.1 Person 1     B
4.2 Person 1     B
4.3 Person 1     B
4.4 Person 1     B
6   Person 3     B

untable完全符合我在评论中提到的内容:-)感谢您提醒我该功能!
chl 2012年

1

uncounttidyr现在给出了相同的结果如上。

library(tidyr)
df %>% uncount(Count)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.