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 而不是表)。

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

4

1 回答 1

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(...)必须按照.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 ...
于 2014-03-08T23:29:35.453 回答