将表格转换为数据框的最佳方法是什么?
将表格转换为数据框的最佳方法是什么?
我在R中有一个表格,使用str()
函数可以显示如下信息:
table [1:3, 1:4] 0.166 0.319 0.457 0.261 0.248 ... - attr(*, "dimnames")=List of 2 ..$ x: chr [1:3] "Metro >=1 million" "Metro <1 million" "Non-Metro Counties" ..$ y: chr [1:4] "q1" "q2" "q3" "q4"
当我打印出来时,它的样子是这样的:
y x q1 q2 q3 q4 Metro >=1 million 0.1663567 0.2612212 0.2670441 0.3053781 Metro <1 million 0.3192857 0.2480012 0.2341030 0.1986102 Non-Metro Counties 0.4570341 0.2044960 0.2121102 0.1263597
我想去掉x
和y
,并将其转换为一个数据框,该数据框与上面的表格完全相同(三行四列),但没有x
或y
。如果我使用as.data.frame(mytable)
,结果却是这样的:
x y Freq 1 Metro >=1 million q1 0.1663567 2 Metro <1 million q1 0.3192857 3 Non-Metro Counties q1 0.4570341 4 Metro >=1 million q2 0.2612212 5 Metro <1 million q2 0.2480012 6 Non-Metro Counties q2 0.2044960 7 Metro >=1 million q3 0.2670441 8 Metro <1 million q3 0.2341030 9 Non-Metro Counties q3 0.2121102 10 Metro >=1 million q4 0.3053781 11 Metro <1 million q4 0.1986102 12 Non-Metro Counties q4 0.1263597
我可能根本不理解表格与数据框之间的关系。
最佳的方法将一个表格转换为数据框是使用as.data.frame.matrix(mytable)
函数。这是因为表格需要先转换为矩阵,然后才能适当地转换为数据框。这个问题的解决方法可以在Computational Ecology博客的as.data.frame.matrix()函数对于列联表的更多细节。中找到。
还可以使用as.data.frame(mytable)
函数。通过is.matrix(mytable)
函数可以发现表格实际上是矩阵,而当as.data.frame()
函数接收到一个矩阵参数时,会分派给as.data.frame.matrix
方法。
在示例中,as.data.frame(mytable)
函数似乎不起作用,这可能是Victor提出这个问题的原因。请Josh明确一下。
我怀疑这是因为实际上是调用了as.data.frame.table
方法,而不是不太具体的as.data.frame.matrix
方法。
非常好的发现。唯一让我不喜欢的是我的xtab因子(第一列)变成了row.names
。我已经成功添加了一列,使用了row.names
的值,但我更希望在第一次转换时就阻止as.data.frame.matrix
写入row.names
。
当使用as.data.frame.matrix(table(x))
时,我得到了Error in seq_len(ncols) : argument must be coercible to non-negative integer
的错误,而as.data.frame(table(x))
可以正常工作,其中x
只是一个数值向量c(1,2,...)
。
它不起作用,行名称被添加到每个条目中,而不是作为行名称保存在数据框中。
这是一个处理row.names
问题的小函数:dftbls <- function (x) { f <- as.data.frame.matrix(x, stringsAsFactors = F) f <- cbind(row.names(f), f) row.names(f) <- NULL names(f)[1] <- "Data" return(f) }
。