将 data.frame 从宽 reshape 为长,从一组变量创建多个列

标签 r dataframe reshape

我试图根据我的需要调整我关于 Reshape() 的知识,但我做不到。 我的 data.frame 有两组列(a 和 b),我想分别将其 reshape 为长格式。 它还有我想保持不变的变量。像这样:

id   2010a  2011a  2012a  char  2010b  2011b  2012b
 1     1      2      3      x     5      6      7
 2     1      2      3      y     5      6      7
 3     1      2      3      z     5      6      7
 4     1      2      3      x     5      6      7

到这个长格式

id    year     a   b  char
 1    2010     1   5   x 
 2    2010     1   5   y  
 3    2010     1   5   z  
 4    2010     1   5   x  
 1    2011     2   6   x 
 2    2011     2   6   y
 3    2011     2   6   z
 4    2011     2   6   x
 1    2012     3   7   x
 2    2012     3   7   y
 3    2012     3   7   z
 4    2012     3   7   x

谢谢!

最佳答案

使用 tidyr 的解决方案:

library(tidyr)
library(dplyr)

dt_final <- gather(dt_initial, key = year, value = value, -id) %>%
  separate(col=year, into=c("year", "name"), sep=-1) %>%
  spread(key = name, value = value) %>%
  arrange(id, year)

关于将 data.frame 从宽 reshape 为长,从一组变量创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654398/

相关文章:

python - 手动设置 scipy 稀疏矩阵形状的含义

r - 如何显示Shiny本地存储的多张图片(png)

R CMD 检查失败, "undefined exports"

python - 计算重复行并填充列

r - 使用 dplyr 实用程序将纯文本数据 reshape 为常规表格数据的任何方法?

python - 将 3x32x32 大小的 numpy 图像数组转换为 32x32x3 并保存为 Python 中的实际图像

r - R 中用于通过循环保存数据的并行计算

r - 捕捉特定警告并忽略其他警告

python - Pandas 被最后一个分隔符分割

r - 考虑另一列中的变量,查找同一列中的不匹配项