【发布时间】:2018-08-10 22:44:18
【问题描述】:
我正在尝试将以下数据转换为 R 中的长格式:
testdata <- data.frame(rnorm(10),rnorm(10),rnorm(10))
rownames(testdata) <- paste0("ID",1:10) # Ids
colnames(testdata) <- c(2001,2002,2003) # Years
testdata
所以列 = 时间,行 = ID。应该不会太难,但在所有示例中,我发现情况正好相反。这如何在datatable 或reshape 或任何其他流行的数据框包中完成?
感谢您的任何提示。通过转置我的数据,我知道一种方法,但这似乎是一种相当低效的方法。
【问题讨论】:
-
尝试
meltmelt(as.matrix(testdata))或tidyverserownames_to_column(testdata, 'rn') %>% gather(key, val, -rn) -
@akrun 谢谢,例如
melt(as.matrix(testdata))有效。但是为什么我需要转换成矩阵呢?对我来说似乎也有点低效,因为显然我必须立即重新转换为数据表。但如果这是要走的路,我会做的。 -
因为它会将行名作为列删除。如果效率较高,请在执行
melt之前创建一列行名。即setDT(testdata, keep.rownames = TRUE),然后使用melt -
在基础 R 中,您可以使用:
data.frame(as.table(as.matrix(testdata)))甚至cbind(ID=rownames(testdata),stack(testdata))
标签: r reshape reshape2 rowname