非常抱歉再次提出这个问题,因为对此已经有很多问题。但是,没有一种解决方案可以解决我的问题。
我的数据如下:
id scale rater rating
1 A 1 5
1 B 1 7
1 A 2 3
1 B 2 6
2 A 1 4
2 B 1 3
2 A 2 2
2 B 2 1
我要spread(rater, rating)
最后它应该看起来像这样:
id scale 1 2
1 A 5 3
1 B 7 6
2 A 4 2
2 B 3 1
问题显然是第一个数据集中的行没有唯一标识符。查看类似问题的答案,似乎没有一种解决方案适合我。我不能只删除重复的行,而在使用行号或分组的标识符group_by(id) %>%
mutate (grouped_id = row_number())
时,我不会将两个评估者放在一列中,而是将每个评估者的行都用NA表示另一评估者的等级。
我觉得我已经尽了一切努力,并且会非常感谢您的帮助!提前非常感谢您!
答案 0 :(得分:1)
我们可以使用spread
函数,而无需group_by
进行任何操作(感谢@Jaap):
library(tidyr)
dat %>%
spread(rater, rating)
# A tibble: 4 x 4
id scale `1` `2`
<int> <chr> <int> <int>
1 1 A 5 3
2 1 B 7 6
3 2 A 4 2
4 2 B 3 1
reshape
尽管我几乎不建议使用reshape
和gather
函数中的spread
函数,但是这是使用基数R的方法: / p>
reshape(dat, direction = 'wide',
idvar = c('id','scale'),
v.names = 'rating',
timevar = 'rater')
id scale rating.1 rating.2
1 1 A 5 3
2 1 B 7 6
5 2 A 4 2
6 2 B 3 1
dat <- structure(list(id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L),
scale = c("A", "B", "A", "B", "A", "B", "A", "B"),
rater = c(1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L),
rating = c(5L, 7L, 3L, 6L, 4L, 3L, 2L, 1L)),
class = "data.frame", row.names = c(NA, -8L))