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(和地图)使它正常工作。
以下工作但会很痛苦,因为我需要重新编码超过两列。
e <- lapply(d, function(x) {
x[,2] <- ifelse(x[,2] > 100, 100, x[,2])
x[,3] <- ifelse(x[,3] > 100, 100, x[,3])
x})
我尝试遵循此处给出的建议: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 列相同
下一次尝试:
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})
在 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(和地图)使它正常工作。
以下工作但会很痛苦,因为我需要重新编码超过两列。
e <- lapply(d, function(x) { x[,2] <- ifelse(x[,2] > 100, 100, x[,2]) x[,3] <- ifelse(x[,3] > 100, 100, x[,3]) x})
我尝试遵循此处给出的建议: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 列相同下一次尝试:
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})