将函数应用于多个数据框
Apply a function to multiple dataframes
我有很多数据框,其中缺失值由字符串 'NA'
表示,R 不理解为缺失值。
冗长的解决方案是将以下函数应用于每个数据帧:
mydf[mydf == 'NA'] <- NA
我想将上述函数应用于多个数据帧。
考虑以下示例:
set.seed(123)
A=as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10)))
B=as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10))
C=as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10))
我的最佳尝试(无效):
target <- list(A, B, C)
lapply(target, function(x) x[x == 'NA'] <- NA )
你几乎做对了。您只是忘记了 R return 是函数的最后访问元素。在你的例子中,它只是每个数据框的一个子集,所以将你的函数设置为 return x
并且它有效:
set.seed(123)
A = as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10))
B = as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10))
C = as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10))
target = list(A, B, C)
lapply(target, function(x) {
x[x == 'NA'] <- NA
return(x)
})
我有很多数据框,其中缺失值由字符串 'NA'
表示,R 不理解为缺失值。
冗长的解决方案是将以下函数应用于每个数据帧:
mydf[mydf == 'NA'] <- NA
我想将上述函数应用于多个数据帧。
考虑以下示例:
set.seed(123)
A=as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10)))
B=as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10))
C=as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10))
我的最佳尝试(无效):
target <- list(A, B, C)
lapply(target, function(x) x[x == 'NA'] <- NA )
你几乎做对了。您只是忘记了 R return 是函数的最后访问元素。在你的例子中,它只是每个数据框的一个子集,所以将你的函数设置为 return x
并且它有效:
set.seed(123)
A = as.data.frame(matrix(sample(c('NA',1:10),10*10,T),10))
B = as.data.frame(matrix(sample(c('NA',LETTERS[1:10]),10*10,T),10))
C = as.data.frame(matrix(sample(c('NA',letters[1:10]),10*10,T),10))
target = list(A, B, C)
lapply(target, function(x) {
x[x == 'NA'] <- NA
return(x)
})