从两列创建成对数据框

时间:2017-11-24 13:31:36

标签: r dataframe

我有一些示例数据

df = data.frame("cus" = c("cus1", "cus1", "cus1", "cus1", "cus2", "cus2", "cus2", 
"cus3", "cus3"), "prod"=c("prod1", "prod2", "prod3", "prod4", "prod5", "prod1", 
"prod2", "prod3", "prod4"))

我想创建一个新的数据框,它具有唯一的(df $ cus)作为rownames和唯一的(df $ prod)作为colnames。如果组合cusX - prodX在df中,则值应为1,否则为0。 所需的输出如下所示:

     prod1 prod2 prod3 prod4 prod5
cus1     1     1     1     1     0
cus2     1     0     0     0     1
cus3     0     0     1     1     0

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

table这样做:

> table(df)
      prod
cus    prod1 prod2 prod3 prod4 prod5
  cus1     1     1     1     1     0
  cus2     1     1     0     0     1
  cus3     0     0     1     1     0

...但本身并没有返回data.frame(而是返回类table的矩阵)。如果您确实需要data.frame,那么as.data.frame(table(df))有效,但可能不是您想要的:

> as.data.frame(table(df))
      cus   prod  Freq
 1   cus1  prod1     1
 2   cus2  prod1     1
 3   cus3  prod1     0
 4   cus1  prod2     1
 …

这是因为执行此转换时 通常更明智。为避免这样做,您需要取消设置表的class

result = as.data.frame(unclass(table(df)))