我在 R 中操作大数据框时遇到问题。这似乎是 R 中的基本问题,但我找不到解决方案。
df 的虚拟示例:
threshold V1 V2 V3 V4
#1 10 1 100 2 200
#2 20 10 50 20 100
#3 30 50 10 100 20
#4 40 100 1 200 2
第 2、3、4 和 5 列中的所有值应根据相应行第一列中的值进行重命名:
这意味着第一行的值: 如果该值小于第一列第一行_(此处为10)中的值,则返回1,否则返回0。
对于第二行中的值: 如果该值小于第一列第二行中的值(此处为 20),则返回 1,否则返回 0。
等
结果应该是这样的:
threshold V1 V2 V3 V4
#1 10 1 0 1 0
#2 20 1 0 0 0
#3 30 0 1 0 1
#4 40 0 1 0 1
我尝试了 apply 和 lapply, 例如这个:
df[2:5] <- lapply(df[2:5], function(x,y) ifelse(x < df[y,1], 1, 0))
但它给了我错误的结果。我仍然在努力处理这段代码。
您能否就如何进行提供一些建议?非常感谢任何帮助!
每行循环方法:
X[-1] = +t(apply(X, 1L, \(x) x[1] < x[-1]))
。
> X = read.table(text="threshold V1 V2 V3 V4
+ 10 1 100 2 200
+ 20 10 50 20 100
+ 30 50 10 100 20
+ 40 100 1 200 2", header = TRUE)
>
> # X[-1] =
> +t(apply(X, 1L, \(x) x[1] < x[-1]))
V1 V2 V3 V4
[1,] 0 1 0 1
[2,] 0 1 0 1
[3,] 1 0 1 0
[4,] 1 0 1 0