我想创建一个表,其中包含原始数据框中缺失值的行位置。这实际上会将第一个表作为输入并在该表下面创建表。
我知道我可以使用 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/