使用R将数据帧转换为宽表

时间:2012-11-29 18:32:56

标签: r

我有以下数据框:

    T  S    V
1  s0  A  2.5
2  s1  A    1
3  s2  A    3
4  s0  B  5.6
5  s1  B    7
6  s0  C    8

我想把它变成:

   s0  s1  s2
A 2.5   1   3
B 5.6   7   0
C   8   0   0

因此chisq.test可以使用它。

我尝试了以下内容,只考虑了事件但不考虑值:

table(d$T, d$S)

1 个答案:

答案 0 :(得分:5)

尝试:

xtabs(V ~ S + T, data=d)  #

你实际上正在扩展列联表的定义,但只要没有重复的级别,我就没有分数值的问题。如果你有可能需要使用具有适当聚合函数的tapply,并且如果你想在缺失因子级别中使用零,则“更正”或“清零”NA。

> td <- tapply(d$V, list(d$S, d$T), sum)
> td[is.na(td) ] <- 0
> td
   s0 s1 s2
A 2.5  1  3
B 5.6  7  0
C 8.0  0  0

还有很多其他方法可能适用于这种“长期”到“广泛”的转型。 plyr包为它的方法提供了更一致的语法。查看plyr中的dcast函数。 base-R中还有reshape函数,搜索工作示例的SO。如果您开始需要速度,data.table包应该值得一看。它有一个与plyr不同的语法,需要一点心理调整,但它在“power useRs”中获得了一个追随者。

相关问题