如果值大于或小于第一列中的值,则替换数据框中的值

问题描述 投票:0回答:1

我在 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))

但它给了我错误的结果。我仍然在努力处理这段代码。

您能否就如何进行提供一些建议?非常感谢任何帮助!

r dataframe replace conditional-statements lapply
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
© www.soinside.com 2019 - 2024. All rights reserved.