r - 将 tibble 扩展到行并使用 R 基于行创建新列
问题描述
下图是数据集的表示。我尝试使用 reshape 和 pivot_wider 来扩大数据,但无法以我预期的方式获得结果。我尝试从堆栈溢出中将多行合并为单行,但发现解决方案是错误的。
随机数据集生成代码:
df1 <- data.frame(Components = c(rep("ABC",5),rep("BCD",5)),
Size = c(sample(1:100,5),sample(45:100,5)),
Age = c(sample(1:100,5),sample(45:100,5)))
解决方案
我们可以unite
用来联合列,然后使用pivot_wider
library(dplyr)
library(tidyr)
library(data.table)
df1 %>%
mutate(rn = rowid(Components)) %>%
pivot_longer(cols = Size:Age) %>%
unite(name, name, rn, sep=".") %>%
pivot_wider(names_from = name, values_from = value)
-输出
# A tibble: 2 x 11
# Components Size.1 Age.1 Size.2 Age.2 Size.3 Age.3 Size.4 Age.4 Size.5 Age.5
# <chr> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
#1 ABC 11 16 79 57 70 2 80 6 91 24
#2 BCD 67 81 63 77 48 73 52 100 49 76
推荐阅读
- linux - Git 钩子没有被推送到裸存储库
- python - 在不使用for循环的情况下,用numpy优化python函数
- c - 设置二进制数等于设置掩码的其他二进制数
- c# - load static fields in class
- alfresco - Alfresco Activiti - How to modify process variables?
- sql - 如何将 sql 查询的结果保存到变量中,然后在脚本中使用它?
- html - 水平滑块 CSS 的最佳方法
- haskell - 如何卸载堆栈包
- flutter - Flutter 提供程序未更新 UI
- javascript - 使用来自 Javascript 的 ClojureScript core.async 通道