r - 在 R 中将数据从行转换为列

标签 r reshape2

我在将数据从列转换为行或宽格式时遇到问题。 我的数据框如下所示

   V1   V2  V3    V4
   1    1  2.041  NA
   1  123  5.190  NA
   1  366  9.500  NA
   1 1462 16.800  NA
   1 2558 23.500  88

   2    1  2.466  NA
   2  123  5.440  NA
   2  366  9.000  NA
   2 2558 18.600  91
   ....

我想将其转换为如下

1 1 2.041 123 5.190 366 9.500 1462 16.800 2558 23.500 88
2 1 2.466 123 5.440 366 9.000 NA   NA     2558 18.600 91

或者

1 1 2.041 NA 123 5.190 NA 366 9.500 NA 1462 16.800 NA 2558 23.500 88
2 1 2.466 NA 123 5.440 NA 366 9.000 NA NA   NA     NA 2558 18.600 91 

我已经尝试过使用 dcast 的几个选项,如下所示,但效果不佳。

dcast(data,V1~.) 
dcast(data,V1~V2+V3+V4) 

最佳答案

带有基础R

t(matrix(c(t(df[-1])), ncol = length(unique(df$V1))))
#      [,1]  [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
# [1,]    1 2.041   NA  123 5.19   NA  366  9.5   NA  1462  16.8    NA  2558  23.5    88
# [2,]    1 2.466   NA  123 5.44   NA  366  9.0   NA  1462  13.7    NA  2558  18.6    91

或者试试这个

library(data.table)
setDT(df)[, as.list(c(t(.SD))), by = V1]
#    V1 V1    V2 V3  V4   V5 V6  V7  V8 V9  V10  V11 V12  V13  V14 V15
# 1:  1  1 2.041 NA 123 5.19 NA 366 9.5 NA 1462 16.8  NA 2558 23.5  88
# 2:  2  1 2.466 NA 123 5.44 NA 366 9.0 NA 1462 13.7  NA 2558 18.6  91

或者没有NAs

setDT(df)[, as.list(na.omit(c(t(.SD)))), by = V1]
#    V1 V1    V2  V3   V4  V5  V6   V7   V8   V9  V10 V11
# 1:  1  1 2.041 123 5.19 366 9.5 1462 16.8 2558 23.5  88
# 2:  2  1 2.466 123 5.44 366 9.0 1462 13.7 2558 18.6  91

根据您的编辑,尝试以下操作:

Res <- setDT(df)[, .(Value = c(t(.SD))), by = V1][, indx := seq_len(.N), by = V1]
dcast(Res, V1 ~ indx, value.var = "Value")
#    V1 1     2  3   4    5  6   7   8  9   10   11 12   13   14 15
# 1:  1 1 2.041 NA 123 5.19 NA 366 9.5 NA 1462 16.8 NA 2558 23.5 88
# 2:  2 1 2.466 NA 123 5.44 NA 366 9.0 NA 2558 18.6 91   NA   NA NA

关于r - 在 R 中将数据从行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28721949/

相关文章:

r - 使用 R reshape 和绘制 linux dstat CSV 文件

r - 如何从 R 中的字符串中拆分和分离时间戳

r - 如何在 Shiny 的开始时将投递箱清空

r - 使用subset()时确定哪个列名导致 'undefined columns selected'错误

r - 在 R : get multiple rows by splitting a column using tidyr and reshape2 中

用更少的时间和更少的内存 reshape 交替的列

R - 如何避免重复过滤和行绑定(bind)

由于重复过滤大数据帧,R for 循环非常慢

r - 从数据框中的列中添加和减去值

r - 多列从长数据到宽数据