r - 重塑 tidyr 数据
问题描述
我想重塑一个非常简单的数据框,但找不到这样做的方法
我尝试了这个解决方案:转置数据帧 和所有相关解决方案,没有运气
我有一个整洁的数据框,如下所示:
df<-rbind(c('a','x1'),c('a','x2'),c('a','x3'),
c('b','x6'),c('b','x7'))
colnames(df)<-c('var','val')
并尝试过
library(dplyr)
library(tidyr)
df %>%
gather(var, val, 2:ncol(df)) %>%
spread_(names(data)[1], "val")
我想要一个看起来像这样的数据框:
a x1 x2 x3
b x6 x7 NA
但我得到这个错误
Error: Each row of output must be identified by a unique combination of keys
解决方案
转换为后我们需要按顺序分组data.frame
(OP的示例是 a matrix
)
library(dplyr)
library(tidyr)
library(stringr)
df %>%
as.data.frame %>%
group_by(var) %>%
mutate(rn = str_c("col", row_number())) %>%
spread(rn, val)
# A tibble: 2 x 4
# Groups: var [2]
# var col1 col2 col3
# <fct> <fct> <fct> <fct>
#1 a x1 x2 x3
#2 b x6 x7 <NA>
推荐阅读
- docker - Docker Maven 插件在 Docker 图像中带有 NONE 标签
- php - PHP 多维数组 - 提取孩子/父母
- sails.js - 尝试在 Sailsjs 应用程序中使用 Cloud 命令时出现参考错误
- java - 配置文件目标不匹配:/archetype-catalog.xml 在 Sonatype 中发布暂存存储库时
- python - NoSuchElementException Chrome v71 无头
- angular - Angular i18n 用于包含 routerLink 的文本并需要不同的字序
- asp.net-mvc-5 - 在 Asp.net MVC 5 中编辑加入表格时完成下拉列表
- angularjs - 表单不活动时的Angular JS表单验证
- sql - 为特定时间范围创建平均值
- c# - 我在哪里设置 Paypal 沙箱中的返回 URL