如何将使用 table 命令获得的偶然性 table 转换为数据帧
How to convert contingency table obtained using table command to dataframe
我正在尝试使用 r 中的 table 函数来创建应急事件 table。但是我得到的不是偶然事件 table,而是值(而不是 table),两个列表。
我的数据有 15000 个观察值和 2 个变量。数据如下所示:
**Field.Label** |**Form.Name**
------------------------------------|---------------
Applicant Name |F1
------------------------------------|---------------
Phone |F1
------------------------------------|---------------
Address |F1
------------------------------------|---------------
Phone |F2
------------------------------------|---------------
Address |F2
------------------------------------|---------------
Title |F2
------------------------------------|---------------
Phone |F3
------------------------------------|---------------
... |...
我使用了以下代码:
CTable<-table(mydata$Field.Label, mydata$Form.Name)
CTable<-as.data.frame(CTable)
View(CTable)
得到这样的结果有 1,665,495 个条目(Field.Label 有 8,541 个级别,Form.Name 有 195 个级别。8,541 * 195 = 1,665,495):
** Field.Label** |** Form.Name** |**Freq**
------------------------------------|---------------|-----------
Applicant Name |F1 |1
------------------------------------|---------------|-----------
Phone |F1 |1
------------------------------------|---------------|-----------
Address |F1 |1
------------------------------------|---------------|-----------
Title |F1 |0
------------------------------------|---------------|-----------
Applicant Name |F2 |0
------------------------------------|---------------|-----------
Phone |F2 |1
------------------------------------|---------------|-----------
Address |F2 |1
------------------------------------|---------------|-----------
Title |F2 |1
------------------------------------|---------------|-----------
Applicant Name |F3 |0
------------------------------------|---------------|-----------
Phone |F3 |1
------------------------------------|---------------|-----------
Address |F3 |0
------------------------------------|---------------|-----------
Title |F3 |0
------------------------------------|---------------|-----------
... |...
我怎样才能得到像下面这样的偶然事件table的结果?
|**F1** |**F2** |**F3** |
------------------------------------|-------|-------|-------|
Applicant Name | 1 |0 |0 |
------------------------------------|-------|-------|-------|
Phone | 1 |1 |1 |
------------------------------------|-------|-------|-------|
Address | 1 |1 |0 |
------------------------------------|-------|-------|-------|
Title | 0 |1 |0 |
------------------------------------|-------|-------|-------|
谢谢!
Data.Table 解法:
library("data.table")
mydata <- fread('Field.Label,Form.Name
Applicant,F1
Phone,F1
Address,F1
Phone,F2
Address,F2
Title,F2
Phone,F3')
CTable <- dcast(setDT(mydata), Field.Label ~ Form.Name, fun = length)
CTable
# Field.Label F1 F2 F3
# 1: Address 1 1 0
# 2: Applicant 1 0 0
# 3: Phone 1 1 1
# 4: Title 0 1 0
class(CTable)
# [1] "data.table" "data.frame"
基础 R 解:
CTable <- table(mydata$Field.Label, mydata$Form.Name)
CTable <- data.frame(matrix(CTable, nrow = dim(CTable)[1], dimnames = dimnames(CTable)))
CTable
# F1 F2 F3
# Address 1 1 0
# Applicant 1 0 0
# Phone 1 1 1
# Title 0 1 0
class(CTable)
# [1] "data.frame"
我正在尝试使用 r 中的 table 函数来创建应急事件 table。但是我得到的不是偶然事件 table,而是值(而不是 table),两个列表。
我的数据有 15000 个观察值和 2 个变量。数据如下所示:
**Field.Label** |**Form.Name**
------------------------------------|---------------
Applicant Name |F1
------------------------------------|---------------
Phone |F1
------------------------------------|---------------
Address |F1
------------------------------------|---------------
Phone |F2
------------------------------------|---------------
Address |F2
------------------------------------|---------------
Title |F2
------------------------------------|---------------
Phone |F3
------------------------------------|---------------
... |...
我使用了以下代码:
CTable<-table(mydata$Field.Label, mydata$Form.Name)
CTable<-as.data.frame(CTable)
View(CTable)
得到这样的结果有 1,665,495 个条目(Field.Label 有 8,541 个级别,Form.Name 有 195 个级别。8,541 * 195 = 1,665,495):
** Field.Label** |** Form.Name** |**Freq**
------------------------------------|---------------|-----------
Applicant Name |F1 |1
------------------------------------|---------------|-----------
Phone |F1 |1
------------------------------------|---------------|-----------
Address |F1 |1
------------------------------------|---------------|-----------
Title |F1 |0
------------------------------------|---------------|-----------
Applicant Name |F2 |0
------------------------------------|---------------|-----------
Phone |F2 |1
------------------------------------|---------------|-----------
Address |F2 |1
------------------------------------|---------------|-----------
Title |F2 |1
------------------------------------|---------------|-----------
Applicant Name |F3 |0
------------------------------------|---------------|-----------
Phone |F3 |1
------------------------------------|---------------|-----------
Address |F3 |0
------------------------------------|---------------|-----------
Title |F3 |0
------------------------------------|---------------|-----------
... |...
我怎样才能得到像下面这样的偶然事件table的结果?
|**F1** |**F2** |**F3** |
------------------------------------|-------|-------|-------|
Applicant Name | 1 |0 |0 |
------------------------------------|-------|-------|-------|
Phone | 1 |1 |1 |
------------------------------------|-------|-------|-------|
Address | 1 |1 |0 |
------------------------------------|-------|-------|-------|
Title | 0 |1 |0 |
------------------------------------|-------|-------|-------|
谢谢!
Data.Table 解法:
library("data.table")
mydata <- fread('Field.Label,Form.Name
Applicant,F1
Phone,F1
Address,F1
Phone,F2
Address,F2
Title,F2
Phone,F3')
CTable <- dcast(setDT(mydata), Field.Label ~ Form.Name, fun = length)
CTable
# Field.Label F1 F2 F3
# 1: Address 1 1 0
# 2: Applicant 1 0 0
# 3: Phone 1 1 1
# 4: Title 0 1 0
class(CTable)
# [1] "data.table" "data.frame"
基础 R 解:
CTable <- table(mydata$Field.Label, mydata$Form.Name)
CTable <- data.frame(matrix(CTable, nrow = dim(CTable)[1], dimnames = dimnames(CTable)))
CTable
# F1 F2 F3
# Address 1 1 0
# Applicant 1 0 0
# Phone 1 1 1
# Title 0 1 0
class(CTable)
# [1] "data.frame"