r - 创建包含缺失值的行位置的数据框

标签 r list dataframe na missing-data

我想创建一个表,其中包含原始数据框中缺失值的行位置。这实际上会将第一个表作为输入并在该表下面创建表。

enter image description here

我知道我可以使用 apply 来创建具有此行位置的列表,但我正在努力获取该列表并制作数据框。

# Minimum working example

# Create dataset
data0 <- data.frame("A" = c(NA,NA,1,1), "B"= c(1,NA,1,1),"C"= c("john","john",NA,NA),"D"= c("john","john","john","john"))

# Create list of all rows containing missing values for a particular column then print as dataframe

list1<-apply(is.na(data0), 2, which)

> print(list1)
$A
[1] 1 2

$B
[1] 2
$C
[1] 3 4
$D
integer(0)

# Turn list1 to a data.frame leading to answer

最佳答案

使用sapply循环遍历list,将length分配给'data0'的nrow,以追加NA 在元素较少的末尾并用 data.frame

包裹
as.data.frame(sapply(list1, `length<-`, nrow(data0)))

-输出

  A  B  C  D
1  1  2  3 NA
2  2 NA  4 NA
3 NA NA NA NA
4 NA NA NA NA

我们也可以这样做

library(dplyr)
data0 %>% 
    mutate(across(everything(), ~ replace(rep(NA_integer_, n()), 
         is.na(.), which(is.na(.)))[order(!is.na(.))]))
   A  B  C  D
1  1  2  3 NA
2  2 NA  4 NA
3 NA NA NA NA
4 NA NA NA NA

如果我们不需要对值进行排序,即位置保持在相同的出现位置

NA^(!is.na(data0)) * row(data0)
      A  B  C  D
[1,]  1 NA NA NA
[2,]  2  2 NA NA
[3,] NA NA  3 NA
[4,] NA NA  4 NA

关于r - 创建包含缺失值的行位置的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68239461/

相关文章:

r - 如何从日期时间创建日期(使用 lubridate)?

java - 通过 recursion-java 添加另一个 arraylist 的元素

javascript - arrayToList 产生奇数输出。怎么了?

algorithm - 通过相似性匹配 2 个字符串列表

r - 为重复的 POSIXct 日期添加一秒

读取带有异常字符的制表符分隔文件,然后写入精确副本

r - 创建拟合对数模型

r - 使用 sjplot 的 plot_model 函数时调整刻面顺序和图例标签

如果大于 0, Pandas 数据框会更改所有值

python - 如何根据条件替换数据框的值