gpt4 book ai didi

r - 在设置的列数上合并 data.frame 列,删除 na,除非行中没有足够的值

转载 作者:行者123 更新时间:2023-12-04 09:31:27 24 4
gpt4 key购买 nike

我想从我的列中删除 NA 值,将所有列合并为四列,同时如果每列中没有 4 个值,则保留 NA行。

假设我有这样的数据,

df <- data.frame('a' = c(1,4,NA,3),
'b' = c(3,NA,3,NA),
'c' = c(NA,2,NA,NA),
'd' = c(4,2,NA,NA),
'e'= c(NA,5,3,NA),
'f'= c(1,NA,NA,4),
'g'= c(NA,NA,NA,4))
#> a b c d e f g
#> 1 1 3 NA 4 NA 1 NA
#> 2 4 NA 2 2 5 NA NA
#> 3 NA 3 NA NA 3 NA NA
#> 4 3 NA NA NA NA 4 4

我想要的结果是,

df.desired <- data.frame('a' = c(1,4,3,3),
'b' = c(3,2,3,4),
'c' = c(4,2,NA,4),
'd' = c(1,5,NA,NA))
df.desired
#> a b c d
#> 1 1 3 4 1
#> 2 4 2 2 5
#> 3 3 3 NA NA
#> 4 3 4 4 NA

最佳答案

您可能已经对 SO 进行了更多探索以调整两个答案 1 & 2 .

  1. 用 NA 移动所有数字
  2. 删除所有 NA 所在的列

结果:

df <- data.frame('a' = c(1,4,NA,3),
'b' = c(3,NA,3,NA),
'c' = c(NA,2,NA,NA),
'd' = c(4,2,NA,NA),
'e'= c(NA,5,3,NA),
'f'= c(1,NA,NA,4),
'g'= c(NA,NA,NA,4))

df.new<-do.call(rbind,lapply(1:nrow(df),function(x) t(matrix(df[x,order(is.na(df[x,]))])) ))
colnames(df.new)<-colnames(df)

df.new

df.new[,colSums(is.na(df.new))<nrow(df.new)]

输出:

> df.new[,colSums(is.na(df.new))<nrow(df.new)]
a b c d
[1,] 1 3 4 1
[2,] 4 2 2 5
[3,] 3 3 NA NA
[4,] 3 4 4 NA

关于r - 在设置的列数上合并 data.frame 列,删除 na,除非行中没有足够的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48520605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com