我需要检查数据帧的值范围,数据帧中的每个向量都有不同的范围。需要检查的数据帧每次都可能不同。
我拥有的所有功能都是c("temp","y","d","p")
。我想检查每个向量的值是否在该范围内,否则填写NA
。
temp_range = c(0,140)
y_range = c(0,100)
d_range = c(-80,100)
p_range = c(0.00,99.9)
check_range <- function(x, range){
x[which(x<range[1] | x>range[2])] = NA
return(x)
}
check_all_range <- function(pp, features){
for( ff in features){
z<- switch(ff,"temp" = check_range(pp$temp,temp_range),
"y" = check_range(pp$r, y_range),
"d" = check_range(pp$d, d_range),
"p"= check_range(pp$p, p_range),
)
print(f)
return(z)
}
}
现在我有一个数据框
x=data.frame(c(200,30,20,-10,-140), c(-10,20,100,10, NA))
names(x)=c("temp","y").
features = c("temp","y")
以某种方式使用check_all_range(x,features)
时,只检查第一个功能temp
,x
仍未更改。
我想也许我不太了解转换。
答案 0 :(得分:0)
看起来你正在覆盖循环的每次迭代。
如果你用pp预填充z然后你只指定z [ff]作为检查值它应该工作
check_all_range的新代码
check_all_range <- function(pp, features){
z <- pp
for( ff in features){
z[ff] <- switch(ff,
"temp" = check_range(pp$temp,temp_range),
"y" = check_range(pp$y, y_range),
"d" = check_range(pp$d, d_range),
"p" = check_range(pp$p, p_range),
)
print(ff)
}
return(z)
}