我不确定如何解决以下问题。我有一个看起来像这样的数据框:
df <- structure(list(category = c(1, 2, 3, 4, 5), f1 = c(2, 3, 2, 3, 1),
f2 = c(1, 2, 4 ,1, 2)), row.names = c(NA, -5L),
class = c("tbl_df", "tbl", "data.frame"))
变量中的数字(名为“category”的变量除外)表示属于这些类别之一的主题,f1 和 f2 是拆分为这两个变量的变量。我想“融化”它们,例如 f1 变量中的那些 2 将成为名为“f”的变量中的 2 行,它们将具有数字 1,同时保持它们旁边的类别,在这种情况下为 1。 F2,类别 1 有 1 个观察值,将再次成为变量“f”和类别 1 中的 1 行,但这次它的编号为 2。
因此,f1 将始终生成在“f”列中具有 1 的行,而 f2 将生成在“f”列中始终具有“2”的行。
下面是我要实现的目标的可视化示例:
category f
1 1 1
2 1 1
3 1 2
4 2 1
5 2 1
6 2 1
7 2 2
8 2 2
9 3 1
10 3 1
11 3 2
12 3 2
13 3 2
14 3 2
提前谢谢你。
最佳答案
对于 tidyr::uncount
来说这是一个完美的任务:
library(tidyr)
df %>%
pivot_longer(cols= c("f1", "f2"), names_to = "f", names_transform = list(f = seq)) %>%
uncount(value)
输出:
df
category f
1 1 1
2 1 1
3 1 2
4 2 1
5 2 1
6 2 1
7 2 2
8 2 2
9 3 1
10 3 1
11 3 2
12 3 2
13 3 2
14 3 2
15 4 1
16 4 1
17 4 1
18 4 2
19 5 1
20 5 2
21 5 2
关于r - 如何基于两列扩展数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70567854/