如何在r中重塑包中使用cast

时间:2014-08-11 03:59:46

标签: r reshape2

嗨我有这样的数据框:

df <- data.frame(site = c('A','A','B','B','C','A','A'),
             state = c('O','F','O','F','O','O','F'),
             value = c(5,4,6,7,2,8,9))

看起来像这样

> df

site state value
   A     O     5
   A     F     4
   B     O     6
   B     F     7
   C     O     2
   A     O     8
   A     F     9

我的目标输出应为

site  F O
   A  4 5
   B  7 6
   C NA 2
   A  9 8

任何人都知道如何实现这一目标?

我认为在R

中应该有与reshape2相关的东西

提前致谢

1 个答案:

答案 0 :(得分:3)

尝试:

df$id <- with(df, ave(1:nrow(df), site, state, FUN=seq_along))
library(reshape2)
dcast(df, site+id~state, value.var="value")[,-2]
#  site  F O
#1    A  4 5
#2    A  9 8
#3    B  7 6
#4    C NA 2

或者

library(tidyr)
library(dplyr)
df %>%
spread(state, value) %>%
arrange(id) %>% 
select(-id)
#  site  F O
#1    A  4 5
#2    B  7 6
#3    C NA 2
#4    A  9 8

或者

reshape(df,  idvar=c("site", "id"), timevar="state",direction="wide")[,-2]