我正在学习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
有人可以帮我吗?
答案 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