加载和扩展列联表

时间:2014-03-08 23:14:51

标签: r dataframe contingency

我有一个数据文件,代表我需要使用的列联表。问题是我无法弄清楚如何正确加载它。

数据结构:

  • 行:个别教会
  • 第1栏:教会名称
  • 第2至第12栏:追随者的平均年龄
  • 每个单元格:跟随相应教会并且相应老的人数。

//在原始数据集中,只有年龄范围可用(例如在60-69之间),因此为了能够用它进行计算,我决定用平均年龄(例如64.5而不是60-69)替换它。

数据样本:

name;7;15;25
catholic;25000;30000;15000
hinduism;5000;2000;3000
...

我试图简单地加载数据并使它们成为一个“表”,这样我就可以扩展它但它不起作用(只产生了一些非常奇怪的东西)。

dataset <- read.table("C:/.../dataset.csv", sep=";", quote="\"")
dataset_table <- as.table(as.matrix(dataset))

当我尝试使用数据时,因为它们生成一个简单的图形,它也不起作用。

barplot(dataset[2,2:4])
Error in barplot.default(dataset[2,2:4]) :    'height' must be a vector or a matrix

分类数据集[2,2:4]向我展示了它是一个我不理解的“列表”(我想这是因为数据集是data.frame而不是表格)。

如果有人能指出我正确的方向如何正确地将数据作为一个表格加载然后使用它们,我将永远感激不尽:)。

1 个答案:

答案 0 :(得分:2)

如果您的文件已经是列联表,请不要使用as.table()

df <- read.table(header=T,sep=";",text="name;7;15;25
catholic;25000;30000;15000
hinduism;5000;2000;3000")
colnames(df)[-1] <- substring(colnames(df)[-1],2)
barplot(as.matrix(df[2,2:4]), col="lightblue")

colnames(...)的转换是因为R不喜欢以数字开头的列名,因此它会以X为前缀。这个代码就是摆脱它。

编辑(对OP评论的回应)

如果您想将上面定义的df转换为适合expand.table(...)使用的表格,则必须按照{{3}中的说明设置dimnames(...)names(dimnames(...)) } expand.table(...)

tab  <- as.matrix(df[-1])
dimnames(tab)        <- list(df$name,colnames(df)[-1])
names(dimnames(tab)) <- c("name","age")
library(epitools)
x.tab <- expand.table(tab)
str(x.tab)
# 'data.frame': 80000 obs. of  2 variables:
#  $ name: Factor w/ 2 levels "catholic","hinduism": 1 1 1 1 1 1 1 1 1 1 ...
#  $ age : Factor w/ 3 levels "7","15","25": 1 1 1 1 1 1 1 1 1 1 ...