将具有多个观测的行转换为列 [英] Make rows with multiple observations into columns

查看:8
本文介绍了将具有多个观测的行转换为列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我也在研究类似的问题,但我找不到与我的案例类似的案例。我有一个数据框,对于每个受试者,每个条件都有多个观察结果。如下所示:

subject   <- c(rep("S1",4), rep("S2",4))
condition <- rep(c(rep("a",2), rep("b",2)),2)
value     <- c(1:8)
df        <- data.frame(subject,condition,value)

df
  subject condition value
  S1         a     1
  S1         a     2
  S1         b     3
  S1         b     4
  S2         a     5
  S2         a     6
  S2         b     7
  S2         b     8

我想重塑它,使其看起来像这样:

  subject condition.a condition.b
  S1           1           3
  S1           2           4
  S2           5           7
  S2           6           8

我尝试了reshapecast,但它们给我一条错误消息,因为每个主题和条件都有多个观察结果。有没有人有关于如何做到这一点的建议?

谢谢!

推荐答案

该问题略显模糊,因为不清楚ab的哪些值应该相互耦合。

假设您希望(S1a)的第一个值与第一个(S2b)等值相结合,则可以添加一个虚拟count列,该列统计 (subjectcondition),然后使用count_idmeltdcast这样的数据:

library(plyr)
library(reshape2)

subject   <- c(rep("S1",4), rep("S2",4))
condition <- rep(c(rep("a",2), rep("b",2)),2)
value     <- c(1:8)
df        <- data.frame(subject,condition,value)

df.2 <- ddply(df, .(subject, condition), function(x) { x$count <- 1:nrow(x); x })
df.2
#   subject condition value count
# 1      S1         a     1     1
# 2      S1         a     2     2
# 3      S1         b     3     1
# 4      S1         b     4     2
# 5      S2         a     5     1
# 6      S2         a     6     2
# 7      S2         b     7     1
# 8      S2         b     8     2

df.3 <- melt(df.2, id.vars=c('subject', 'condition', 'count'))
dcast(df.3, subject + count ~ condition)
#   subject count a b
# 1      S1     1 1 3
# 2      S1     2 2 4
# 3      S2     1 5 7
# 4      S2     2 6 8

这是您想要的吗?

这篇关于将具有多个观测的行转换为列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆