首页 > 解决方案 > R - 将数据框中的数据按两列分组并重新排列到新的数据框中

问题描述

我有一个数据框 foo:

   A  B  C
1  x  m  2
2  x  n  3
3  x  o  11
4  y  m  5
5  y  o  8

编辑:感谢@akrun 提醒我,我添加了代码来生成这个df:

foo <- structure(list(A = c("x", "x", "x", "y", "y"), 
       B = c("m", "n", "o", "m", "o"), C = c(2L, 3L, 11L, 5L, 8L)), 
       class = "data.frame", row.names = c("1", "2", "3", "4", "5"))

并从中创建一个新的数据框,将 A 中的值作为行名,将 B 中的值作为列名,并将 C 中的值作为条目,如下所示:

   m  n  o
x  2  3  11
y  5  NA 8

到目前为止,我找到了 aggregate() 函数

aggregate(.~A, foo, FUN=toString)

这给了我这样的东西(尽管它将 B 中的字母转换为数字),这不是我在这里需要的:

   A  B      C
1  x  1,2,3  2,3,11
2  y  1,3    5,8

我在 SO 上找到了答案,建议使用 dplyr 包和 group_by 来解决类似问题,但我无法解决如何使这个问题适应我的问题。抱歉,如果我忽略了某些内容,谢谢您的任何建议!

标签: rdataframe

解决方案


如果您愿意寻求tidyverse解决方案,您可以使用pivot_widerfrom tidyr

编辑:添加column_to_rownames以将 A 列移动到行名。

library(tidyverse)

foo %>%
  pivot_wider(id_cols = A, names_from = B, values_from = C) %>%
  column_to_rownames("A")

输出

  m  n  o
x 2  3 11
y 5 NA  8

推荐阅读