R——对于列表中的每个元素,如何在每个 j 列中设置相同的最大值?

R -- For every element in a list, how can I set the same maximum value in each of j columns?

在 R 中,我有一个包含 i 个数据帧的列表。对于每个数据框中的 j 列,我想将大于 100 的值重新编码为 100。我可以在一个循环中执行此操作,但我不知道如何使用应用函数之一执行此操作。

模拟数据和循环:

a <- data.frame(letters[11:20],floor(runif(10, min = 10, max = 200)),floor(runif(10, min = 10, max = 200)),letters[1:10])
b <- data.frame(letters[11:20],floor(runif(10, min = 10, max = 200)),floor(runif(10, min = 10, max = 200)),letters[15:24])
d <- list(a,b)

for(i in 1:2){
    for(j in 2:3) {
    d[[i]][j] <- ifelse(d[[i]][,j] > 100, 100, d[[i]][,j])
    d}
}

我尝试使用 lapply(和地图)使它正常工作。

  1. 以下工作但会很痛苦,因为我需要重新编码超过两列。

    e <- lapply(d, function(x) {
      x[,2] <- ifelse(x[,2] > 100, 100, x[,2])
      x[,3] <- ifelse(x[,3] > 100, 100, x[,3])
      x})
    
  2. 我尝试遵循此处给出的建议:http://adv-r.had.co.nz/Functionals.html

    j <- 2:3
    e <- Map(function(x,y) {
        x[,y] <- ifelse(x[,y] > 100, 100, x[,y])
        x},d,j)
    

这不太正确,因为 d[[1]] 中的第 3 列尚未修改。与 d[[2]]

中的第 2 列相同
  1. 下一次尝试:

    i <- 1:2
    j <- 2:3
    e <- Map(function(x,y,z) {
        x[[y]][,z] <- ifelse(x[[y]][,z] > 100, 100, x[[y]][,z])
        x},d,i,j)
    

[.default(x[[y]], , z) 错误:维数不正确

我不明白为什么我在此处收到维数不正确的错误。我显然遗漏了一些东西,但在我看来:

x[[y]][,z] <- ifelse(x[[y]][,z] > 100, 100, x[[y]][,z])

等同于:

x[,y] <- ifelse(x[,y] > 100, 100, x[,y]) 

来自我之前的代码块,它没有产生错误。

我想我的问题源于对 apply 函数族的不完全理解。

我们将不胜感激任何形式的帮助。谢谢!

这似乎达到了你想要的效果

lapply(d, function(x){x[2:3][x[2:3]>100] <-100;x})