转换为正确的格式并计算数据框中的项目

时间:2016-02-12 01:32:20

标签: r dataframe count

如何将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()所做的,但如果是这样的话我就无法理解。

1 个答案:

答案 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