【发布时间】:2019-10-17 20:00:49
【问题描述】:
我有 8 个数据集,我想在每个数据集的 3 列(var1、var2、var3)上应用一个函数将任何小于 5 的数字转换为 NA。我怎样才能编写一个函数来有效和更快地做到这一点?我经历了很多关于堆栈溢出的此类问题,但我没有找到任何使用特定列的答案。我已经编写了要替换的函数,但无法弄清楚如何应用于所有数据集。
Input:
Data1
variable1 variable2 variable3 variable4
10 36 56 99
15 3 2 56
4 24 1 1
Expected output:
variable1 variable2 variable3 variable4
10 36 56 99
15 NA NA 56
NA 24 NA 1
对另外 7 个数据集执行相同的操作。
到目前为止,我已将所需的变量和数据集存储在两个不同的列表中。
var1=enquo(variable1)
var2=enquo(variable2)
var3=enquo(variable3)
Total=3
listofdfs=list()
listofdfs_1=list()
for(i in 1:8) {
df=sym((paste0("Data",i)))
listofdfs[[i]]=df
}
for(e in 1:Ttoal) {
listofdfs[[e]]= eval(sym(paste0("var",e)))
}
选中的列会经过这个函数:
temp_1=function(x,h) {
h=enquo(h)
for(e in 1:Total) {
if(substr(eval(sym(paste0("var",e))),1,3)=="var") {
y= x %>% mutate_at(vars(!!h), ~ replace(., which(.<=5),NA))
return(y)
}
}
}
我期待着什么:
lapply(对于每个数据集的选定列,temp_1)
【问题讨论】:
-
@MrFlick 很抱歉给您带来不便!我已经编辑了问题。
-
@MrFlick 抱歉我已经编辑了!