Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从两列创建成对数据帧_R_Dataframe - Fatal编程技术网

R 从两列创建成对数据帧

R 从两列创建成对数据帧,r,dataframe,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")) 我想创建一个新的数据帧,其中unique(df$cus)作为行名,unique(df$prod)

我有一些样本数据

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"))
我想创建一个新的数据帧,其中unique(df$cus)作为行名,unique(df$prod)作为列名。如果cusX-prodX组合在df中,则该值应为1,如果不在df中,则该值应为0。 所需的输出如下所示:

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

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

这样做:

> 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
 …
这是因为执行这种转换通常更明智。要避免这样做,您需要取消设置表的

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

您可以这样做,一步就获得data.frame:
as.data.frame.matrix(table(df))
@Pierre:True,但通常不应该直接调用S3泛型。事实上,现在甚至在编写软件包时都不鼓励导出它们
base
在这方面使用了过时的做法。