r - 将 data.frame 滞后 NA 的数量

标签 r function apply lag

换句话说,我试图滞后一个看起来像这样的 data.frame:

V1 V2 V3 V4 V5 V6 
1  1  1  1  1  1
2  2  2  2  2  NA
3  3  3  3  NA NA
4  4  4  NA NA NA
5  5  NA NA NA NA
6  NA NA NA NA NA

看起来像这样的东西:

V1 V2 V3 V4 V5 V6 
1  NA NA NA NA NA
2  1  NA NA NA NA
3  2  1  NA NA NA
4  3  2  1  NA NA
5  4  3  2  1  NA
6  5  4  3  2  1

到目前为止,我已经使用了一个计算 NA 数量的函数,并尝试将我的 data.frame 中的每一列滞后于该列中相应的 NA 数量。

V1 <- c(1,2,3,4,5,6)
V2 <- c(1,2,3,4,5,NA)
V3 <- c(1,2,3,4,NA,NA)
V4 <- c(1,2,3,NA,NA,NA)
V5 <- c(1,2,NA,NA,NA,NA)
V6 <- c(1,NA,NA,NA,NA,NA)
mydata <- cbind(V1,V2,V3,V4,V5,V6)
na.count <- colSums(is.na(mydata))
lag.by <- function(mydata, na.count){lag(mydata, k = na.count)}
lagged.df <- apply(mydata, 2, lag.by) 

但是这段代码只是落后于整个 data.frame 一个......

最佳答案

一个选项是使用 apply 遍历列并首先通过使用 is.na 对 NA 元素进行子集化来附加 NA 元素,然后是非 NA 元素通过否定逻辑向量 (is.na)

apply(mydata, 2, function(x) c(x[is.na(x)], x[!is.na(x)]))
#     V1 V2 V3 V4 V5 V6
#[1,]  1 NA NA NA NA NA
#[2,]  2  1 NA NA NA NA
#[3,]  3  2  1 NA NA NA
#[4,]  4  3  2  1 NA NA
#[5,]  5  4  3  2  1 NA
#[6,]  6  5  4  3  2  1

关于r - 将 data.frame 滞后 NA 的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823074/

相关文章:

r - 如何在R中根据时间分配数据帧组

r - glmnet 错误 (nulldev == 0) 停止 ("y is constant; gaussian glmnet fails at standardization step")

javascript - 我如何解决 Javascript 闭包问题?

python - 将函数应用于数据框中列标题包含特定字符串的列

r - 使用 R 的应用函数之一简化代码

R:对数据框的多列进行行式计算的最快方法

r - 将 data.table 链分成两行代码以提高可读性

r - 将多个 ggplot2 绘图与网格对齐

C++ 将指针传递给函数 (Howto) + C++ 指针操作

c - C 中的宏和函数冲突