r - 变量 R 之间的转换

标签 r reshape reshape2 tidyr

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

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 相似的关键字函数,带有 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

关于r - 变量 R 之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30163422/

相关文章:

r - 将数据框折叠成单行并根据行 R 创建新列

reshape2:在不聚集的情况下将高转换到宽

r - 为什么 dcast 不接受 x[length(x)]?

r 使用 dplyr 'gather' 函数

css - 如何扩大 R DT 包中的数据表?

r - 如何使用 ggplot2 包在 map 上绘制不同颜色的经纬度点?

r - 在离线的 Debian 机器上安装最新的 R 版本

r - 如何将数据从宽格式排列到长格式,并指定关系

r - 如何在 R 中转换字符列

r - 使用 R 中的唯一列转置