如何将df转换为df2,其中df由下式给出:
> df
ID VALUES
1 1 a,b,c,d
2 2 a
3 3 c,d,f,g
和df2应该类似于:
> df2
ID a b c d f g
1 1 1 1 1 1 0 0
2 2 1 0 0 0 0 0
3 3 0 0 1 1 1 1
其中df的值已分解为单独的列,1和0反映ID是否与该值相关联(来自df)。
这是否有特定的功能?我认为这就是table()所做的,但如果是这样的话我就无法理解。
答案 0 :(得分:3)
这是一种不使用额外包的方法:
0 + t( sapply(df[['VALUES']], function(x) {
letters[1:6] %in% scan(text=x, what="", sep=",") }))
Read 4 items
Read 1 item
Read 4 items
[,1] [,2] [,3] [,4] [,5] [,6]
a,b,c,d 1 1 1 1 0 0
a 1 0 0 0 0 0
c,d,f,g 0 0 1 1 0 1
它确实返回一个矩阵,它确实取决于VALUES列是字符而不是因子。如果要禁止来自scan
的信息消息,则可以使用参数。您可以使用ID列cbind
进行此操作:
cbind( df["ID"], 0+ t( sapply(df[['VALUES']], function(x) {letters[1:6] %in% scan(text=x, what="", sep="," , quiet=TRUE) })) )
ID 1 2 3 4 5 6
a,b,c,d 1 1 1 1 1 0 0
a 2 1 0 0 0 0 0
c,d,f,g 3 0 0 1 1 0 1