r - 如何基于两列扩展数据框?

标签 r dataframe dplyr pivot-table melt

我不确定如何解决以下问题。我有一个看起来像这样的数据框:

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/

相关文章:

python - 在 pandas 中切片串联数据框

r - 一次在多个列上使用mutate,而无需明确地将其写出

用空格替换功能名称中的所有下划线

r - 将第二个标题添加到基于极坐标的 ggplot2 图

r - 使用 ggplot 隐藏图例

r - R中地球上两个地方之间的距离

r - 使用grepl提取R中的子字符串

function - R:2个不同包中的2个同名函数

python - Pandas 在 iloc Nulls 上设置值

R dplyr 或 purrr group_by 到向量列表