如何根据R中的条件替换多列中的值

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

我在编写将多列中的所有指定值替换为新值的代码时遇到问题。数据框有 20 多列,我只想更改 8 列(col1、col2、col3 等)中的值。我想分别用 (0, -1, -2, -3) 替换所有值 (4, 5, 6, 7)。我在 R 和编程方面的知识非常有限,而且我只能得到一个可以完成一个专栏工作的解决方案。

我在这里阅读了很多类似问题的解决方案,但我可以找到适合我的解决方案。所以这是我的代码:

data$col1[raw_data$col1 == 4 ] <- 0
data$col1[raw_data$col1 == 5 ] <- -1
data$col1[raw_data$col1 == 6] <- -2
data$col1[raw_data$col1 == 7] <- -3

所以这对于一栏来说效果很好。我可以为所有列都做一个吗?

r replace mutate
1个回答
0
投票

举个例子:

demodf <- data.frame(
  col1 = 1:10,
  col2 = 3:12,
  col3 = 5:14,
  col4 = 7:16
)

cols_to_amend <- c("col1", "col3")

仅替换相关列:

demodf[cols_to_amend] <- apply(demodf[cols_to_amend], 2, FUN = \(x) sapply(x, \(y) if (y %in% 4:7) 4-y else y))

给出:

   col1 col2 col3 col4
1     1    3   -1    7
2     2    4   -2    8
3     3    5   -3    9
4     0    6    8   10
5    -1    7    9   11
6    -2    8   10   12
7    -3    9   11   13
8     8   10   12   14
9     9   11   13   15
10   10   12   14   16

说明:

我们可以使用列名称列表来选择要替换的位置

demodf[cols_to_amend]

然后我们使用

apply
MARGIN = 2
将此函数应用于此数据框中的每一列:

 <- apply(demodf[cols_to_amend], 2,

我们应用的函数将是一个匿名函数(

\( )
),一次一列作为输入:

FUN = \(x)

它将使用

sapply
向下移动该列,对每个项目执行以下操作:

\(y) if (y %in% 4:7) 4-y else y)
© www.soinside.com 2019 - 2024. All rights reserved.