从R中的特定列开始,替换数据帧中的NA

时间:2017-06-14 09:29:28

标签: r dataframe

我正在学习R,我在尝试替换数据帧中的na值时遇到问题,不包括进程中的前2列。 我这样做了:

# example data.frame 
v1<-c("a","b","c","d")
v2<-c(3,3,NA,NA)
v3<-c(1,NA,1,1)
v4<-c(1,NA,1,NA)
v5<-c(1,0,NA,NA)
df<-data.frame(v1,v2,v3,v4,v5)
df

#fal is a Matrix with only FALSE
fal <- data.frame(matrix(ncol = 2, nrow = nrow(df), FALSE))
fal

m <- cbind(fal,is.na(df[,3:5]))
df[m]<-0

所以我有一个矩阵为TRUE,其中na必须被替换,我将其设置为0.

df看起来像这样:

   v1 v2 v3 v4 v5
1  a  3  1  1  1
2  b  3 NA NA  0
3  c NA  1  1 NA
4  d NA  1 NA NA

,矩阵看起来像那样:

   X1    X2    v3    v4    v5
1 FALSE FALSE FALSE FALSE FALSE
2 FALSE FALSE  TRUE  TRUE FALSE
3 FALSE FALSE FALSE FALSE  TRUE
4 FALSE FALSE FALSE  TRUE  TRUE

有人可以帮我吗?

2 个答案:

答案 0 :(得分:3)

m不是矩阵,而是数据框。

df[as.matrix(m)] <- 0
df

##   v1 v2 v3 v4 v5
## 1  a  3  1  1  1
## 2  b  3  0  0  0
## 3  c NA  1  1  0
## 4  d NA  1  0  0

修改:或将fal <- data.frame(matrix(ncol = 2, nrow = nrow(df), FALSE))替换为fal <- matrix(ncol = 2, nrow = nrow(df), FALSE)

答案 1 :(得分:2)

试试这个:

df[,3:5][is.na(df[,3:5])] <-0
相关问题