我有一些示例数据
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
有人知道如何解决这个问题吗?
答案 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)))