手动创建表时R colnames / rownames错误

时间:2014-12-03 11:52:32

标签: r

我试图直接在Rstudio中直接从数据创建一个简单的2列表。

所以输出应该是。

Material    Kilograms
Iron        5.54
Copper      2.12
Tin         0.27
Zinc        0.60
Nickel      0.23
Barium      0.05
Other       6.44

所以按照这里的示例Creating tables directly,这是我应该遵循的一般语法。

> smoke <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3,byrow=TRUE)
> colnames(o) <- c("High","Low","Middle")
> rownames(o) <- c("current","former","never")
> smoke <- as.table(smoke)
> smoke
        High Low Middle
current   51  43     22
former    92  28     21
never     68  22      9

所以调整我的代码这是我创建的,注意到我打算让第一列有一个材料名称。

levels <- matrix(c(5.54,2.12,0.27,0.60,0.23,0.05,6.44),ncol=1,byrow=TRUE)
colnames(0) <- c("Materials","Kilograms")
rownames(0) <- c("Iron","Copper","Tin","Zinc","Nickel","Barium","Other")
levels <- as.table(levels)
levels

然而它解决了这个问题。

R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet"
> levels <- matrix(c(5.54,2.12,0.27,0.60,0.23,0.05,6.44),ncol=1,byrow=TRUE)
> colnames(o) <- c("Materials","Kilograms")
Error in colnames(o) <- c("Materials", "Kilograms") : 
  object 'o' not found
> rownames(o) <- c("Iron","Copper","Tin","Zinc","Nickel","Barium","Other")
Error in rownames(o) <- c("Iron", "Copper", "Tin", "Zinc", "Nickel", "Barium",  : 
  object 'o' not found
> levels <- as.table(levels)
> levels
     A
A 5.54
B 2.12
C 0.27
D 0.60
E 0.23
F 0.05
G 6.44

所以我认为字体可能导致我在colnames和rownames中键入 o 而不是 0 ,但仍然会导致类似的错误。

修改

由于没有可以直接创建上面发布的简单材料公斤表的答案,我是否应该假设在excel中创建表格并链接到该表格或从excel导出为csv更常见或更容易?

3 个答案:

答案 0 :(得分:1)

表格用于数字。 data.frame是用于存储混合数据类型(以及一般数据)的标准结构。

您可以使用以下内容:

o <- data.frame(Material=c("Iron","Copper","Tin","Zinc","Nickel","Barium","Other"), Kilograms=c(5.54,2.12,0.27,0.60,0.23,0.05,6.44), row.names=c("Iron","Copper","Tin","Zinc","Nickel","Barium","Other"))

材料本身就是rowname和数据列。

您可以使用

将data.frame转换为表格
xtabs(Kilograms~Material, data=o)

但结果将按字母顺序排列材料级别。

答案 1 :(得分:1)

您在最后两个代码块之间混淆了0和o。但问题是,您最初将数据写入“级别”。但是然后命名&#39; o&#39;。

的行和列

通常使用与函数相同的名称来调用变量通常是一个坏主意,在这种情况下是&#39;级别&#39;。

答案 2 :(得分:0)

我找到了一个我从R for Dummies改编的答案。

答案似乎很容易解决,并且不需要复杂的语法来实现,这在R教程和我之前搜索过的其他SO答案中都有出现。

materials <- c("Iron","Copper","Tin","Zinc","Nickel","Barium","Other")
kilograms <- c(5.54,2.12,0.27,0.60,0.23,0.05,6.44)
levels.data <- data.frame(materials,kilograms)

如果有人能够提供更好的答案或表现出一种值得赞赏的改进。