我有一个长格式的数据框,如
id varA varB
1 'a' 112
1 'b' 212
1 'c' 308
2 'a' 99
2 'b' 123
2 'c' 452
我想根据id
varB
和varA == 'a'
的每个varA == 'b'
折叠。
在如下的广泛数据框中:
id varBa varBb varBc
1 112 212 308
2 99 123 452
...我只是使用apply或像df$collapsed = df$varBa + df$varBb
这样的矢量化添加。
如何使用长格式数据框执行此操作? (由于按要素的后续分析,只有宽幅格式不是一种选择)。
是否可以以长格式折叠(或执行任何其他算术运算),以便我有一个额外的行来折叠值?。
答案 0 :(得分:1)
试试这个:
dfw <- reshape(df,
timevar = "varA",
idvar = c("id"),
direction = "wide")
dfw
id varB.a varB.b varB.c
1 1 112 212 308
4 2 99 123 452
然后你可以对新数据框进行任何数学运算。
答案 1 :(得分:0)
使用tidyr:
df <- structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L),
varA = c("a","b", "c", "a", "b", "c"),
varB = c(112L, 212L, 308L, 99L, 123L, 452L)),
.Names = c("id", "varA", "varB"),
class = "data.frame",
row.names = c(NA,-6L))
library(tidyr)
wide_df <- spread(df, varA, varB )
id a b c
1 1 112 212 308
2 2 99 123 452
如果要将标题更改为varBa等,可以使用dplyr&#39; mutate
函数来更改varA。
wide_df <- dplyr::mutate(df, varA = paste("varB",df$varA, sep="")) %>%
spread(varA, varB )
id varBa varBb varBc
1 1 112 212 308
2 2 99 123 452