R 仅对最后的连续列缺少值替换
我有一个数据框,其中有10列标记为0、1或NA。 我想将NA替换为0,但仅当NAs在最后一列中是连续的时,我希望这样一行:R 仅对最后的连续列缺少值替换,r,R,我有一个数据框,其中有10列标记为0、1或NA。 我想将NA替换为0,但仅当NAs在最后一列中是连续的时,我希望这样一行: c(1,0,1,NA,0,NA,NA,NA,NA) 变成 c(1,0,1,NA,0,0,0,0,0) 我试过这个 Nume<-ifelse(rowSums(is.na(Numerica[, 3:10])) != ncol(Numerica[3:10]), Numerica[,3:10] == 0) 可能有更好的方法来解决这个问题,但是,这里有一个使用apply的基本
c(1,0,1,NA,0,NA,NA,NA,NA)
变成
c(1,0,1,NA,0,0,0,0,0)
我试过这个
Nume<-ifelse(rowSums(is.na(Numerica[, 3:10])) != ncol(Numerica[3:10]), Numerica[,3:10] == 0)
可能有更好的方法来解决这个问题,但是,这里有一个使用
apply
的基本R方法,它只将行中最后一个NA
s替换为0
df[] <- t(apply(df, 1, function(x) {
y <- cumsum(!is.na(x))
replace(x, max(y) == y & is.na(x), 0)
}))
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 1 0 1 NA 0 0 0 0 0 0
#2 1 0 1 NA 0 NA NA NA 0 0
#3 1 0 1 NA 0 NA NA NA 0 1
df[]可能有更好的方法来解决这个问题,但是,这里有一个使用apply
的基本R方法,它只将行中最后一个NA
s替换为0
df[] <- t(apply(df, 1, function(x) {
y <- cumsum(!is.na(x))
replace(x, max(y) == y & is.na(x), 0)
}))
df
# V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
#1 1 0 1 NA 0 0 0 0 0 0
#2 1 0 1 NA 0 NA NA NA 0 0
#3 1 0 1 NA 0 NA NA NA 0 1
df[]你也可以试试这个。我使用了Ronak的数据帧
library(tidyverse)
library(zoo)
as_tibble(t(df)) %>%
mutate_all(~zoo::na.fill(., c(NA, NA, 0)))
# A tibble: 10 x 3
`1` `2` `3`
<int> <int> <int>
1 1 1 1
2 0 0 0
3 1 1 1
4 NA NA NA
5 0 0 0
6 0 NA NA
7 0 NA NA
8 0 NA NA
9 0 0 0
10 0 0 1
库(tidyverse)
图书馆(动物园)
不稳定(t(df))%>%
变异所有(~zoo::na.fill(,c(na,na,0)))
#一个tibble:10x3
`1` `2` `3`
1 1 1 1
2 0 0 0
3 1 1 1
4娜娜娜娜
5 0 0 0
60纳纳
70纳纳
80NA
9 0 0 0
10 0 0 1
您也可以试试这个。我使用了Ronak的数据帧
library(tidyverse)
library(zoo)
as_tibble(t(df)) %>%
mutate_all(~zoo::na.fill(., c(NA, NA, 0)))
# A tibble: 10 x 3
`1` `2` `3`
<int> <int> <int>
1 1 1 1
2 0 0 0
3 1 1 1
4 NA NA NA
5 0 0 0
6 0 NA NA
7 0 NA NA
8 0 NA NA
9 0 0 0
10 0 0 1
库(tidyverse)
图书馆(动物园)
不稳定(t(df))%>%
变异所有(~zoo::na.fill(,c(na,na,0)))
#一个tibble:10x3
`1` `2` `3`
1 1 1 1
2 0 0 0
3 1 1 1
4娜娜娜娜
5 0 0 0
60纳纳
70纳纳
80NA
9 0 0 0
10 0 0 1