我想计算变量之间转换的摘要。我有看起来像的数据集:
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
我想找到一个转换表:
x.2013 y.2013
x.2012 1 1
y.2012 2 0
因此,它计算
x
的值变化了多少。 ,所以它是 y
的零变化至 y
为下一年和 2 为 y -> x
.我不知道如何计算这样的表格,我正在查看
reshape2
和 tidyr
文档,但没有成功。理想情况下,我正在寻找类似
reshape
的包(我想不出谷歌搜索的关键字...)与 cast
相似的关键字函数,带有 fun
取 my.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
关于r - 变量 R 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163422/