首页 > 解决方案 > 将 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)))

标签: rtidyverserowsreshape2tibble

解决方案


我们可以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

推荐阅读