用R中的NA替换倒数第二个非空行尾

时间:2016-07-28 06:12:39

标签: r dplyr

我有一个如下所示的数据框:

 df <- read.table(tc <- textConnection("
 var1    var2    var3    var4
 1       2       7      NA
 4       4       NA      6
 2       NA      3       NA                
 4       4       4       4              
 1       3      NA      NA"), header = TRUE); close(tc)

我想用NA替换倒数第二个非空行尾部,给我一个新的数据框,如下所示:

 df <- read.table(tc <- textConnection("
 var1    var2    var3    var4
 1       NA       7      NA
 4       NA      NA      6
 NA       NA      3       NA                
 4       4       NA       4              
 NA       3      NA      NA"), header = TRUE); close(tc)

我可以使用以下语句识别倒数第二个非空行尾部的位置:

 penultimate <- function(x) head(tail(x[!is.na(x)], 2),1)

我的问题是如何将这些更改为NA。

1 个答案:

答案 0 :(得分:2)

我们可以使用echo "bar" >> foo.txt git add foo.txt git commit -m "Add foo.txt" git push origin master git rm foo.txt git commit -m "Remove foo.txt" git push origin master

apply

或者我们可以将penultimate <- function(x) replace(x, head(tail(which(!is.na(x)), 2),1), NA) t(apply(df, 1, penultimate)) # var1 var2 var3 var4 #[1,] 1 NA 7 NA #[2,] 4 NA NA 6 #[3,] NA NA 3 NA #[4,] 4 4 NA 4 #[5,] NA 3 NA NA which

一起使用
arr.ind=TRUE

如果我们需要使用i1 <- which(!is.na(df), arr.ind=TRUE) df[i1[!!ave(i1[,2], i1[,1], FUN = function(x) rank(-x)==2),]] <- NA dplyr rowwise可以获得预期的输出

do

或使用library(dplyr) df %>% rowwise() %>% do(data.frame(t(penultimate(unlist(.))))) # var1 var2 var3 var4 # <int> <int> <int> <int> #1 1 NA 7 NA #2 4 NA NA 6 #3 NA NA 3 NA #4 4 4 NA 4 #5 NA 3 NA NA

data.table