我在编写将多列中的所有指定值替换为新值的代码时遇到问题。数据框有 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
所以这对于一栏来说效果很好。我可以为所有列都做一个吗?
举个例子:
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)