gpt4 book ai didi

r - 根据其他列中的值条件跨数据框中的列应用 if else 语句

转载 作者:行者123 更新时间:2023-12-04 17:44:08 25 4
gpt4 key购买 nike

我想对数据框中的每一列 (a-d) 应用 if else 语句,如果每个值满足基于另一列 (m) 的条件,则该值保持不变,否则该值更改为零。

这是一个可重现的示例:

a <- c(10, 11, 12, 15,7,8)
b <- c(15,11,16,17,1.5,9)
c <- c(18,14,6,14,1,17)
d <- c(12,11,13,19,2,4)
p <- c(2,1,3,2.5,1.3,2.1)
m <- c(12,13,8,9,14,11)

df<- data.frame(a,b,c,d,p,m)

print(df)

a b c d p m
1 10 15.0 18 12 2.0 12
2 11 11.0 14 11 1.0 13
3 12 16.0 6 13 3.0 8
4 15 17.0 14 19 2.5 9
5 7 1.5 1 2 1.3 14
6 8 9.0 17 4 2.1 11

这是我想要做的工作的“长”版本,但非常重复:
df$a<- ifelse((df$a-df$p)>df$m, df$a, 0)
df$b<- ifelse((df$b-df$p)>df$m, df$b, 0)
df$c<- ifelse((df$c-df$p)>df$m, df$c, 0)
df$d<- ifelse((df$d-df$p)>df$m, df$d, 0)

print(df)

这是我想要的输出:
   a  b  c  d   p  m
1 0 15 18 0 2.0 12
2 11 11 14 11 1.0 7
3 12 16 0 13 3.0 8
4 15 17 14 19 2.5 9
5 0 0 0 0 1.3 14
6 0 0 17 0 2.1 11

最佳答案

我们可以使用 lapply

df[1:4] <- lapply(df[1:4], function(x) ifelse((x - df$p) > df$m, x, 0))
df
# a b c d p m
#1 0 15 18 0 2.0 12
#2 0 0 0 0 1.0 13
#3 12 16 0 13 3.0 8
#4 15 17 14 19 2.5 9
#5 0 0 0 0 1.3 14
#6 0 0 17 0 2.1 11

或者不使用 ifelse
df[1:4] <- ((df[1:4]-df$p) > df$m)*df[1:4]

关于r - 根据其他列中的值条件跨数据框中的列应用 if else 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com