重塑/转换数据框 - 根据变量和多个值创建新列

时间:2016-02-09 10:01:49

标签: r casting reshape transpose melt

我有以下示例数据框,我需要重塑,但我无法使用reshape或cast函数来执行我需要的操作

df
   Testee Gender UniqueIdentifier BirthYear Graph V1 V2 V3 V4
1 7685906      1   33448683-29373      1996     1  4  6  6  5
2      NA     NA                         NA     2  7  2  9  6
3      NA     NA                         NA     3 -3  4 -3 -1
4 7685910      2   33444446-47897      1997     1  8  0  3  4
5      NA     NA                         NA     2  7  9  3  2
6      NA     NA                         NA     3  1 -9  0  2

我想为每个图形(1,2和3)转换V1,V2,V3和V4的行值。所以我需要12列:Graph1.V1 Graph1.V2 Graph1.V3 Graph1.V4 Graph2.V1 Graph2.V2等但我正在努力使用强制转换函数

这是所需的输出

df2
   Testee Gender UniqueIdentifier BirthYear X1.V1 X1.V2 X1.V3 X1.V4 X2.V1 X2.V2 X2.V3 X2.V4 X3.V1 X3.V2 X3.V3 X3.V4
1 7685906      1   33448683-29373      1996     4     6     6     5     7     2     9     6    -3     4    -3    -1
2 7685910      2   33444446-47897      1997     8     0     3     4     7     9     3     2     1    -9     0     2

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

我们可以将'UniqueIdentifier'中的空白元素更改为'NA',使用na.locf通过循环{{1}将'NA'值转换为前4列的前一个非NA元素},然后使用lapply中的dcast(将'data.frame'转换为'data.table'(data.table)后),因为它可能需要多个setDT(df1)

value.var

或者在使用df1$UniqueIdentifier[df1$UniqueIdentifier==''] <- NA library(zoo) df1[1:4] <- lapply(df1[1:4], na.locf) library(data.table) dcast(setDT(df1), Testee+Gender+UniqueIdentifier+BirthYear~Graph, value.var=c('V1', 'V2', 'V3', 'V4')) # Testee Gender UniqueIdentifier BirthYear V1_1 V1_2 V1_3 V2_1 V2_2 V2_3 V3_1 #1: 7685906 1 33448683-29373 1996 4 7 -3 6 2 4 6 #2: 7685910 2 33444446-47897 1997 8 7 1 0 9 -9 3 # V3_2 V3_3 V4_1 V4_2 V4_3 # 1: 9 -3 5 6 -1 # 2: 3 0 4 2 2 进行预处理后,我们可以使用na.locf中的reshape

base R