根据另一列是否满足条件来更改列的值

时间:2019-03-27 06:00:38

标签: r dataframe

如果列B <= 20,我想从列A的值中减去1。

A = c(1,2,3,4,5)
B = c(10,20,30,40,50)
df = data.frame(A,B)

输出

  A  B
1 0 10
2 1 20
3 3 30
4 4 40
5 5 50

我的数据非常庞大,所以我不想使用循环。 R中有什么计算有效的方法吗?

3 个答案:

答案 0 :(得分:3)

你可以

df$A[df$B <= 20]  <- df$A[df$B <= 20] - 1

#  A  B
#1 0 10
#2 1 20
#3 3 30
#4 4 40
#5 5 50

我们可以逐步分解以了解其工作原理。

首先,我们检查B中的哪些数字小于等于20,从而得出逻辑矢量

df$B <= 20
#[1]  TRUE  TRUE FALSE FALSE FALSE

使用该逻辑向量,我们可以选择A中的数字

df$A[df$B <= 20]
#[1] 1 2

从这些数字中减去1

df$A[df$B <= 20] - 1
#[1] 0 1

,并将这些值替换为A中的相同索引。


有了dplyr,我们也可以使用case_when

library(dplyr)

df %>%
  mutate(A = case_when(B <= 20 ~ A - 1, 
                       TRUE ~ A))

答案 1 :(得分:0)

另一种可能性:

df$A <- ifelse(df$B < 21, df$A - 1, df$A)

答案 2 :(得分:0)

这是一个data.table解决方案:

library(data.table)
setDT(df)
df[B <= 20, A := A - 1]