首页 > 解决方案 > R创建列组合来自两列的信息

问题描述

我有一个看起来像这样的数据框:

structure(list(t1errser_1 = c(5, 2, 3, 4, 4, NA, 3, NA, 4, 2), 
    t1errser_2 = c(NA, 4, 3, 5, NA, NA, 4, NA, 4, 2), t1errser_3 = c(2, 
    3, 3, 4, NA, 4, NA, NA, NA, 4), t1errser_4 = c(NA, NA, NA, 
    NA, NA, 4, 5, NA, NA, NA), t1errser_5 = c(NA, NA, NA, NA, 
    3, NA, NA, NA, NA, 2), t1errser_6 = c(5, 4, NA, NA, 5, NA, 
    3, NA, NA, 3), t1errser_7 = c(NA, NA, NA, NA, NA, NA, 4, 
    NA, NA, 2), t1errser_8 = c(NA, 4, NA, 5, NA, NA, 5, 4, NA, 
    3), t1errser_9 = c(1, NA, NA, NA, NA, 5, NA, NA, NA, NA), 
    t1errsel = c(6, 2, 2, 2, 1, 9, 6, 8, 1, 5)), row.names = c(4L, 
6L, 7L, 8L, 9L, 10L, 11L, 13L, 15L, 16L), class = "data.frame")

所以我有九列 ( t1errser_1to t1errser_9) 和一列t1errsel。我想要的是一个名为t1errsel_ser. 此列应包含中指定的从errser_1errser_9的信息。因此,例如,第一列应该是(对于该列是and = ),对于第二列(errsel 是 2 and = ),然后依此类推......errser_xerrselt1errsel_ser5errsel6errser_654errser_243

希望这很清楚。请询问是否需要其他信息。
非常感谢!

标签: r

解决方案


您可以使用mapplyusing[和 provide x[1:9]toasplit和 usex$t1errsel进行子集化。

x$t1errsel_ser <- mapply("[", asplit(x[1:9], 1), x$t1errsel)
x$t1errsel_ser
# [1] 5 4 3 5 4 5 3 4 4 2

或使用矩阵子设置

x[cbind(1:nrow(x), x$t1errsel)]
# [1] 5 4 3 5 4 5 3 4 4 2

推荐阅读