如何在R中扩展数据框

机器算法验证 r
2022-01-27 09:04:17

我在用 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 组合都这样做。想不出什么好词在网上搜索。

3个回答

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

鉴于上述 df (@Gaël Laurans)

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

虽然它是一个非常有用的包,但我认为reshape在这种情况下是多余的,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))

我找不到直接处理头顶数据框的方法,所以我分别处理每个变量,然后重新组装它们,这有点难看,但只要你注意总是使用就可以了计数的相同变量。

uncount从现在开始给出tidyr上面相同的结果。

library(tidyr)
df %>% uncount(Count)