您能帮我简化一下吗?我需要通过df $ X238对df $ X1重复238次:
df$X1[is.na(df$X1)] <- NA
df$X1[df$X1 == ‘N/A’] <- NA
df$X1[df$X1 == 0] <- NA
df$X2[is.na(df$X2)]<- NA
df$X2[df$X2 == ‘N/A’] <- NA
df$X2[df$X2 == 0] <- NA
...df$X238
答案 0 :(得分:0)
正如瑞·巴拉达斯(Rui Barradas)指出的那样,第一个任务没有做任何事情。其余的可以这样处理:
df <- data.frame(
X1 = c(0,1,3,NA),
X2 = c(1, 'N/A', 3,3)
)
NA_subst <- function(x) {
x[x == 'N/A'] <- NA
x[x == 0] <- NA
return(x)
}
as.data.frame(lapply(df, NA_subst))
答案 1 :(得分:0)
您的问题是关于不同的列,但您的示例涉及不同的对象。我会回答这两种情况,但首先是reproducible example:
set.seed(123)
X <- data.frame(
a = sample(c(0:2, NA, 'N/A'), 4),
b = sample(c(0:2, NA, 'N/A'), 4)
)
X -> Y1 -> Y2
> X
a b
1 1 N/A
2 <NA> 0
3 N/A 1
4 2 2
X[X == 0 | X == 'N/A'] <- NA
# `is.na(x) <- NA` is redundant
> X
a b
1 1 <NA>
2 <NA> <NA>
3 <NA> 1
4 2 2
如果相反,您需要在多个数据帧中重复操作,建议将其放在列表中:
df.list <- mget(objects(pattern = 'Y'))
> lapply(df.list, function(x) replace(x, x == 0 | x == 'N/A', NA))
$Y1
a b
1 1 <NA>
2 <NA> <NA>
3 <NA> 1
4 2 2
$Y2
a b
1 1 <NA>
2 <NA> <NA>
3 <NA> 1
4 2 2
如果您需要将列表转换回单个对象,则可以使用:
list2env(df.list, .GlobalEnv) # this will overwrite objects with same names