考虑一个有序数据框,其中有一列由值和 NA 组成,如下所示:
df <- data.frame(id=rep(1:6), value=c(NA,NA,23,45,12,76))
我想将 NA 的位置移动到数据帧的前两行,同时保持值的顺序如下:
df$new_value <- c(23,45,12,76,NA,NA)
我能做到这一点吗?谢谢!
最佳答案
我们可以在 NA
元素上使用 order
df$new_value <- df$value[order(is.na(df$value))]
df$new_value
#[1] 23 45 12 76 NA NA
<小时/>
通过执行is.na
,它返回一个逻辑向量
is.na(df$value)
#[1] TRUE TRUE FALSE FALSE FALSE FALSE
对其应用订单
会返回
order(is.na(df$value))
#[1] 3 4 5 6 1 2
因为按字母顺序,FALSE
在 TRUE
之前被考虑。 order
值是向量的初始位置索引。这可以更容易地理解
sort(c(TRUE, FALSE, TRUE), index.return = TRUE)
#$x
#[1] FALSE TRUE TRUE
#$ix
#[1] 2 1 3
关于r - 将 NA 与值交换,同时保留原始值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48541755/