我有以下示例数据框,我需要重塑,但我无法使用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
感谢任何帮助!
答案 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