首页 > 解决方案 > 按条件从数据框中的值中减去

问题描述

我想从我的数据框中选择一些列,并从满足条件的所有值中减去一个数字。在我的情况下,我想选择我的数据的 5:10 列,并从 >5 的所有值中减去 10,同时保持所有其他值相同,然后保存这个数据框。

我尝试过的解决方案(如下)只是从所有值中减去 10。我怎样才能做到这一点?非常感谢任何帮助。

data <- data.frame(replicate(10,sample(-1:10,1000,rep=TRUE)))    #generate random data


# what i have tried so far
(data[, 5:10] > 5) - 10

标签: r

解决方案


在 base r 中,您可以使用 lapply

lapply(data[, 5:10], function(x) ifelse(x > 5, x - 10, x))

在 dplyr 你可以做

data <- data.frame(replicate(10,sample(-1:10,1000,rep=TRUE))) 
library(dplyr, warn.conflicts = F)

data %>%
  mutate(across(5:10, ~ifelse(.>5, . - 10, .)))

    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1    9  3  3  5 -2 -4  1  4 -4  -1
2    1  0  7  7 -2  3  2 -1  4  -3
3    2 -1  8  1  1  1 -4  0  0   3
4    9  9  4  6 -2 -3  3  0  0   0
5    7 -1  9  5  0  1  1 -1 -1   2
6    4  9  4  7  4  1  0 -1 -3  -1
.
.
.
.

推荐阅读