r - 将 NA 与值交换,同时保留原始值顺序

标签 r dataframe

考虑一个有序数据框,其中有一列由值和 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

因为按字母顺序,FALSETRUE 之前被考虑。 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/

相关文章:

python - 使用 dataframe2 中设置的条件从 dataframe1 中提取值(pandas,python)

python - String Join 将 True 视为 bool 值而不是字符串

r - 使用 for 循环整理工作 R 代码

r - 将 geom_area 的区域调整为 geom_line 的一条线

r - 如何为物种页面下载维基百科图像

r - 堆积条形图上的单个误差条 ggplot

python pandas 将数据框更改为旋转列

r - 如何修复 ggnewscale 中的图例顺序

r - 获取两列的最小值

python - 如何在 DataFrame 中执行 If 和 Else If 语句?