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)
你会得到类似的东西:
我想用 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)
你会得到类似的东西: