我有以下数据框:
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)
答案 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”中获得了一个追随者。