r - 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 来解决类似问题,但我无法解决如何使这个问题适应我的问题。抱歉,如果我忽略了某些内容,谢谢您的任何建议!
解决方案
如果您愿意寻求tidyverse
解决方案,您可以使用pivot_wider
from 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
推荐阅读
- javascript - 是否有必要明确“卸载”动态加载的javascript?
- pandas - Pandas:保持前三行包含每个唯一值的值
- ruby - 安装 gem 时强制编译 Ruby 扩展?
- tomcat - 使用安全端口配置数据源
- php - 服务器上的 PHP GET array0
- javascript - 如果返回的数据包含 NaN,则 jQuery $.get 不会执行
- hl7 - 如何识别带有HL7的设备?
- combobox - 在功能区 Visual Basic 中以编程方式创建组合框
- selenium - groovy.lang.missing propertyexception no such property: Error expectedconditions for class: Script25
- python-3.6 - 如何检查小马 orm 缓存中是否存在对象?