如何将数据重塑为长格式?

问题描述 投票:1回答:3

我有一个像这样的.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
r reshape
3个回答
1
投票

我通常发现reshape2包更直观:只需在~之前(相应之后)放置所需的行(resp。列)。

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

4
投票

所有这些CAPITAL列名都让你在shift键上有点粘 - 你做了qazxsw poi。小写qazxsw poi的工作方式如下:

C('CONN','OWNER')

0
投票

也可以使用c包中的> reshape(dat, varying=c('TABLE', 'COLS'), v.names=c('CONN', 'OWNER'), direction='long') CONN OWNER time id 1 TABLE_A 10 1 1 2 TABLE_B 9 1 2 3 TAB_A 11 1 3 4 TAB_B 14 1 4 5 TABLE_A 9 1 5 6 TABLE_B 9 1 6 7 TAB_A 11 1 7 8 TAB_D 56 1 8 9 TABLE_A 9 1 9 10 TABLE_C 3 1 10 11 TABLE_D 11 1 11 12 TAB_A 11 1 12 函数:

gather()
© www.soinside.com 2019 - 2024. All rights reserved.