长格式数据帧R中的折叠变量
我有一个长格式的数据帧,比如长格式数据帧R中的折叠变量,r,dataframe,R,Dataframe,我有一个长格式的数据帧,比如 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
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
如何使用长格式数据帧实现这一点?(由于按因素进行后续分析,仅采用较宽的格式不是一种选择)
是否可以以长格式折叠(或执行任何其他算术运算),以便为折叠的值添加一行?尝试以下操作:
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
dfw使用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
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