在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}
}
我试着用(和Map)来实现这个功能。
这是不完全正确的,因为在d[1]中的col 3还没有被修改。与d[2]中的col 2相同
[.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])
在前面的代码块中,该代码块没有生成错误。
我想我的问题源于对应用函数族的不完全理解。
任何形式的帮助都将不胜感激。谢谢!
发布于 2015-03-09 13:46:52
这似乎实现了你想要的
lapply(d, function(x){x[2:3][x[2:3]>100] <-100;x})
https://stackoverflow.com/questions/28943362
复制相似问题