数据包含两个变量:id和grade.每个ID可以为每个等级创建多个记录.
dat <- data.frame(id = c(1,1,1,2,2,2,2,3,3,4,5,5,5),
grade = c("a", "b", "c", "a", "a", "b", "b", "d", "f", "c", "a", "e", "f"))
Run Code Online (Sandbox Code Playgroud)
我想将数据重新整形为一个宽大的形状,这样每个id只有一个记录,每个唯一等级变成一个列.每列的值为0或1,具体取决于每个id的等级.
最终的数据集如下:
id a b c d e f
1 1 1 1 0 0 0
2 1 1 0 0 0 0
3 0 0 0 1 0 1
4 0 0 1 0 0 0
5 1 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)
我试过这个,但没有运气.
n.dat <- reshape(dat, timevar = "grade",idvar = c("id"),direction = "wide")
Run Code Online (Sandbox Code Playgroud)
您可以简单地table使用值,然后根据> 0条件转换为逻辑,然后使用+一元运算符转换回数字(或者如果您想要更少的高尔夫球,简单地+ 0)
+(table(dat) > 0)
# grade
# id a b c d e f
# 1 1 1 1 0 0 0
# 2 1 1 0 0 0 0
# 3 0 0 0 1 0 1
# 4 0 0 1 0 0 0
# 5 1 0 0 0 1 1
Run Code Online (Sandbox Code Playgroud)