r - 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_1
to t1errser_9
) 和一列t1errsel
。我想要的是一个名为t1errsel_ser
. 此列应包含中指定的从errser_1
到errser_9
的信息。因此,例如,第一列应该是(对于该列是and = ),对于第二列(errsel 是 2 and = ),然后依此类推......errser_x
errsel
t1errsel_ser
5
errsel
6
errser_6
5
4
errser_2
4
3
希望这很清楚。请询问是否需要其他信息。
非常感谢!
解决方案
您可以使用mapply
using[
和 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
推荐阅读
- java - 关于声明和分配实例字段构造函数的初学者问题
- r - 如何在 R 中的自举过程中每次都包含某些样本?
- python - 如何从目录中搜索特定的 zip 文件?
- javascript - 当新项目添加到 Framer Motion (React) 中的列表顶部时,列表项目的动画布局
- matlab - 在 MATLAB 中制作动画时如何修复帧大小错误
- jquery - 为什么我不能用我的 jQuery ion.rangeSlider 范围滑块更新我的第二个输入值?
- django - ProgrammingError: 函数 lower(bigint) 不存在 (Django, AWS RDS, PostgreSQL)
- spring - Quarkus spring Hibernate和多租户如何设置?
- python - 更改值但新值覆盖上一个值
- javascript - 命令处理程序中的异步