R:尝试创建交叉(频率)时出现错误消息 table

R: error messages when attempting to create cross (frequency) table

我想用 R

创建一个交叉 table

我有一个包含以下信息的 csv 文件:

Client_ID    Buying_Category
   123          A
   123          B 
   567          A
   567          C
   ...

我将该 csv 加载到 R

data <- read.csv ("file", header = TRUE)

现在我想创建一个十字架table

所以它看起来像这样

       A    B   C
A      2    1   1
B      1    1   0
C      1    0   1

我试过了

crosstable <- data %>% group_by(Client_ID, Buying_Category) %>% summarize(records = sign(n()))

但是得到这个错误:

Error in UseMethod("group_by_") : no applicable method for 'group_by_' applied to an object of class "function"

所以我尝试了这个

with(data, tapply(PRODUCT, list(Client_ID, Buying_Category), FUN = function(x) length(unique(x))))

并得到这个错误:

Error in eval(substitute(expr), data, enclos = parent.frame()) : invalid 'envir' argument of type 'closure'

感谢任何帮助!

此过程使用 dplyr(数据操作)和 tidyr(数据重塑)。

dt = read.table(text="
Client_ID    Buying_Category
123          A
123          B 
567          A
567          C", header=T)

library(dplyr)
library(tidyr)

dt %>% 
  group_by(Client_ID) %>%                  # for each client
  do(expand.grid(.$Buying_Category,        # create pariwise combinations of categories  
                 .$Buying_Category)) %>%
  count(Var1, Var2) %>%                    # count how many times you have each combination
  spread(Var2,n, fill=0)                   # reshape to get your table


# Source: local data frame [3 x 4]
# 
#      Var1     A     B     C
#    (fctr) (dbl) (dbl) (dbl)
# 1      A     2     1     1
# 2      B     1     1     0
# 3      C     1     0     1

根据您的最新评论,我将提供更多有关如何继续您要创建的情节的信息。 我将创建最简单的版本作为示例:

dt %>% 
  group_by(Client_ID) %>%                  # for each client
  do(expand.grid(.$Buying_Category,        # create pariwise combinations of categories  
                 .$Buying_Category)) %>%
  count(Var1, Var2) -> dt_circ             

这里不需要reshape,因为你可以使用dt_circ

这种格式
#     Var1   Var2     n
#   (fctr) (fctr) (int)
# 1      A      A     2
# 2      A      B     1
# 3      A      C     1
# 4      B      A     1
# 5      B      B     1
# 6      C      A     1
# 7      C      C     1

这里下面的函数就会明白Var1就是"from",Var2就是"to",n就是"value"。

library(circlize)

chordDiagram(dt_circ)

你会得到类似的东西: