我正在尝试将宽数据集转换为长数据集,但通过此处搜索无法找到问题的解决方案。我有一个广泛的数据集,其中包括 3 轮中的 3 个友谊提名,然后是关于每轮中每个提名的 3 个后续问题。下面的示例数据显示了结构。后续问题是其中包含 a、b 或 c 的问题,其数字对应于该 Wave 的好友列(例如,w1a1 是好友 1 (w1fid1) 的第 1 波后续问题)。我已经包含了我拥有的和我想要的样本数据集:
样本数据:
df<-read.table(text= "id w1fid1 w1fid2 w1fid3 w2fid1 w2fid2 w2fid3 w3fid1 w3fid2 w3fid3 w1a1 w1a2 w1a3 w1b1 w1b2 w1b3 w1c1 w1c2 w1c3 w2a1 w2a2 w2a3 w2b1 w2b2 w2b3 w2c1 w2c2 w2c3 w3a1 w3a2 w3a3 w3b1 w3b2 w3b3 w3c1 w3c2 w3c3
1 10 3 9 4 13 9 15 14 NA 1 1 0 0 1 0 1 0 0 1 1 1 1 0 0 1 1 1 1 1 NA 1 0 NA 0 0 NA
2 13 NA 20 4 18 19 12 10 8 1 NA 0 0 NA 0 0 NA 0 1 0 0 1 1 0 0 1 0 0 0 0 1 0 0 1 0 0
3 NA 9 19 19 8 20 17 9 2 NA 1 1 NA 0 0 NA 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 1 1 0
4 13 19 9 19 16 2 2 11 14 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0
5 11 8 9 18 20 7 9 17 12 0 1 1 0 0 0 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 1 1 0 1 0", header = TRUE)
所需输出:
df <- read.table(text= "id wave fid a b c
1 1 10 1 0 1
1 1 3 1 1 0
1 1 9 0 0 0
1 2 4 1 1 1
1 2 13 1 0 1
1 2 9 1 0 1
1 3 15 1 1 0
1 3 14 1 0 0
1 3 NA NA NA NA
2 1 14 1 0 0
2 1 NA NA NA NA
2 1 20 0 0 0
2 2 4 1 1 0
2 2 18 0 1 1
2 2 19 0 0 0
2 3 12 0 1 1
2 3 10 0 0 0
2 3 8 0 0 0
3 1 NA NA NA NA
3 1 9 1 0 0
3 1 19 1 0 0
3 2 19 0 0 1
3 2 8 0 0 0
3 2 20 1 0 0
3 3 17 0 0 1
3 3 9 0 0 1
3 3 2 1 0 0
4 1 13 1 1 1
4 1 19 1 1 1
4 1 9 1 1 0
4 2 19 0 0 0
4 2 16 0 0 0
4 2 2 1 1 0
4 3 2 0 0 0
4 3 11 0 0 1
4 3 14 0 1 0
5 1 11 0 0 1
5 1 8 1 0 1
5 1 9 1 0 1
5 2 18 1 1 1
5 2 20 0 1 0
5 2 7 1 0 1
5 3 9 1 1 0
5 3 17 0 1 1
5 3 12 0 1 0", header = TRUE)
我用过这个代码:
df %>% pivot_longer(-id,
names_to = c('wave', 'type', '.value'),
names_pattern = "(\\w+\\d+)(\\w+)(\\d+)")
这给了我这个:
id wave type `1` `2` `3`
1 w1 fid 10 3 9
1 w2 fid 4 13 9
1 w3 fid 15 14 NA
1 w1 a 1 1 0
1 w1 b 0 1 0
1 w1 c 1 0 0
1 w2 a 1 1 1
1 w2 b 1 0 0
1 w2 c 1 1 1
1 w3 a 1 1 NA
1 w3 b 1 0 NA
1 w3 c 0 0 NA
2 w1 fid 13 NA 20
2 w2 fid 4 18 19
2 w3 fid 12 10 8
2 w1 a 1 NA 0
2 w1 b 0 NA 0
2 w1 c 0 NA 0
2 w2 a 1 0 0
2 w2 b 1 1 0
2 w2 c 0 1 0
2 w3 a 0 0 0
2 w3 b 1 0 0
2 w3 c 1 0 0
3 w1 fid NA 9 19
3 w2 fid 19 8 20
3 w3 fid 17 9 2
3 w1 a NA 1 1
3 w1 b NA 0 0
3 w1 c NA 0 0
3 w2 a 0 0 1
3 w2 b 0 0 0
3 w2 c 1 0 0
3 w3 a 0 0 1
3 w3 b 0 0 0
3 w3 c 1 1 0
4 w1 fid 13 19 9
4 w2 fid 19 16 2
4 w3 fid 2 11 14
4 w1 a 1 1 1
4 w1 b 1 1 1
4 w1 c 1 1 0
4 w2 a 0 0 1
4 w2 b 0 0 1
4 w2 c 0 0 0
4 w3 a 0 0 0
4 w3 b 0 0 1
4 w3 c 0 1 0
5 w1 fid 11 8 9
5 w2 fid 18 20 7
5 w3 fid 9 17 12
5 w1 a 0 1 1
5 w1 b 0 0 0
5 w1 c 1 1 1
5 w2 a 1 0 1
5 w2 b 1 1 0
5 w2 c 1 0 1
5 w3 a 1 0 0
5 w3 b 1 1 1
5 w3 c 0 1 0
我假设我必须重写names_to和names_pattern才能得到我想要的东西,但我坚持正确的语法才能到达那里。