变量 R 之间的转换

Transition between variables R

我想计算变量之间转换的摘要。我的数据集看起来像:

id x.2012 y.2012 x.2013 y.2013
 1      1      0      0      1 
 2      0      1      1      0
 3      0      1      1      0
 4      1      0      1      0

我想找到一个转换table:

        x.2013 y.2013
x.2012       1      1
y.2012       2      0

因此,它会计算 x 的值变化了多少,因此下一年 yy 的变化为零,y -> x 的变化为 2。

我不知道如何计算这样的 table,我正在查看 reshape2 and tidyr 文档,但没有成功。


理想情况下,我正在寻找类似 reshape 的软件包(我想不出 Google 搜索此关键字的关键字...),它与 cast 类似函数,funmy.df:

的子集
modern.cast(my.df, .(x.2012, y.2012) ~ .(x.2013, y.2013), fun)

一个可能的解决方案是

res <- data.frame(t(apply(df[-1], 1, function(x) names(df[-1])[x != 0])))
library(reshape2)
dcast(res, X1 ~ X2)
#       X1 x.2013 y.2013
# 1 x.2012      1      1
# 2 y.2012      2      0

替代方法是使用 which(这可能更有效)

indx <- which(df[-1] != 0, arr.ind = TRUE)
res <- data.frame(matrix(names(df)[-1][indx[order(indx[, 1]), 2]], ncol = 2, byrow = TRUE))
dcast(res, X1 ~ X2)
#       X1 x.2013 y.2013
# 1 x.2012      1      1
# 2 y.2012      2      0