我有一个这样的数据帧(在变量IV1-IV5中,我存储了目标项目(F1、TI1、TI2、LI1、LI2(的问卷位置,这些项目依次包含评级(:
SUBJECT EXP IV1 IV2 IV3 IV4 IV5 F1 TI1 TI2 LI1 LI2
1 1 n TI2 LI1 F1 LI2 TI1 25 75 75 50 50
2 2 n LI1 TI2 LI2 F1 TI1 30 70 70 45 45
3 3 e TI1 F1 TI2 LI2 LI1 25 70 70 50 50
我想把它变成一个长的数据帧,像这样:
SUBJECT EXP TYPE IV Rating
1 1 n F1 3 25
2 1 n TI1 5 75
3 1 n TI2 1 50
4 1 n LI1 2 50
5 1 n LI2 4 50
6 2 n F1 4 30
7 2 n TI1 5 70
8 2 n TI2 2 70
9 2 n LI1 1 45
10 2 n LI2 3 45
11 3 e F1 2 25
12 3 e TI1 1 70
13 3 e TI2 3 70
14 3 e LI1 5 50
15 3 e LI2 4 50
我知道gather((,但我不认为它自己能完成这个转换。还有什么比自己写一堆ifelse语句更快的吗?
我的一个想法是制作一个新的列,并有条件地对((两个单元格进行联合(对于每个TI列,将评级与具有匹配值的IV列名称联合(,然后在这些组合的列之间进行gather((,以便随后分离(。但这似乎很乏味,因为我确信,这一定是一个常见的问题。任何建议都会有所帮助——谢谢!
编辑:我的MWE并没有像它应该的那样代表我的问题。我更改了上面两个示例DF中的一些内容。
这就是我能够想到的。我更了解gather((,pivot_langer((不断抛出错误。
df1 <- df %>%
gather("TYPE", "RATING", -SUBJECT, -EXP, -IV1, -IV2, -IV3, -IV4, -IV5) %>%
gather("POS", "foobar", -SUBJECT, -EXP, -TYPE, -RATING) %>%
filter(TYPE == foobar) %>%
select(-foobar)
这是我可以接受的初步结果(并根据需要进行一些清理(:
SUBJECT EXP TYPE RATING POS
1 n TI2 75 IV1
1 n LI1 50 IV2
1 n F1 25 IV3
1 n LI2 50 IV4
1 n TI1 75 IV5
2 n LI1 45 IV1
2 n TI2 70 IV2
2 n LI2 45 IV3
2 n F1 30 IV4
2 n TI1 70 IV5
3 e TI1 70 IV1
3 e F1 25 IV2
3 e TI2 70 IV3
3 e LI2 50 IV4
3 e LI1 50 IV5
我很乐意接受改进的建议。到目前为止,感谢Ronak Shah的指导。