如何将数据重塑为长格式? [英] How to reshape data to long format?
本文介绍了如何将数据重塑为长格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的.csv文件:
+-------+---------+------+-------+
| CONN | TABLE | COLS | OWNER |
+-------+---------+------+-------+
| ONE | TABLE_A | 10 | MIKE |
| ONE | TABLE_B | 9 | MIKE |
| ONE | TAB_A | 11 | KIM |
| ONE | TAB_B | 14 | KIM |
| TWO | TABLE_A | 9 | MIKE |
| TWO | TABLE_B | 9 | MIKE |
| TWO | TAB_A | 11 | KIM |
| TWO | TAB_D | 56 | KIM |
| THREE | TABLE_A | 9 | MIKE |
| THREE | TABLE_C | 3 | MIKE |
| THREE | TABLE_D | 11 | KIM |
| THREE | TAB_A | 11 | KIM |
+-------+---------+------+-------+
我想按Conn和Owner比较表和COLS。我如何重塑此数据以进行此比较?我的数据在这里:
dat <- structure(list(CONN = c("ONE", "ONE", "ONE", "ONE", "TWO", "TWO",
"TWO", "TWO", "THREE", "THREE", "THREE", "THREE"), TABLE = c("TABLE_A",
"TABLE_B", "TAB_A", "TAB_B", "TABLE_A", "TABLE_B", "TAB_A", "TAB_D",
"TABLE_A", "TABLE_C", "TABLE_D", "TAB_A"), COLS = c(10L, 9L,
11L, 14L, 9L, 9L, 11L, 56L, 9L, 3L, 11L, 11L), OWNER = c("MIKE",
"MIKE", "KIM", "KIM", "MIKE", "MIKE", "KIM", "KIM", "MIKE", "MIKE",
"KIM", "KIM")), .Names = c("CONN", "TABLE", "COLS", "OWNER"), class = "data.frame", row.names = c(NA,
-12L))
我尝试了如下内容:
reshape(dat, varying=c('TABLE', 'COLS'), v.names=C('CONN', 'OWNER'), direction='long')
Error in C("CONN", "OWNER") : object not interpretable as a factor
推荐答案
我通常觉得reshape2
包更直观:只需放置所需的行(分别列)之前(分别为之后)~
。
dcast( CONN + OWNER ~ TABLE, data = dat, value.var="COLS" )
# CONN OWNER TAB_A TAB_B TAB_D TABLE_A TABLE_B TABLE_C TABLE_D
# 1 ONE KIM 11 14 NA NA NA NA NA
# 2 ONE MIKE NA NA NA 10 9 NA NA
# 3 THREE KIM 11 NA NA NA NA NA 11
# 4 THREE MIKE NA NA NA 9 NA 3 NA
# 5 TWO KIM 11 NA 56 NA NA NA NA
# 6 TWO MIKE NA NA NA 9 9 NA NA
这篇关于如何将数据重塑为长格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文