Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 汇总数据框以沿子集返回非NA值_R_Dplyr_Lapply - Fatal编程技术网

R 汇总数据框以沿子集返回非NA值

R 汇总数据框以沿子集返回非NA值,r,dplyr,lapply,R,Dplyr,Lapply,希望有人能帮我个忙。我在网上发现了类似的问题,但我所看到的例子都没有一个能完全满足我的需求,也没有一个能处理我的数据结构 我需要沿着数据子集从数据帧中删除NAs,并将剩余的NA值压缩到每个数据子集的行中 例如: #create example data a <- c(1, 1, 1, 2, 2, 2) #this is the subsetting variable in the example b <- c(NA, NA, "B", NA, NA, "C") #max 1 non-

希望有人能帮我个忙。我在网上发现了类似的问题,但我所看到的例子都没有一个能完全满足我的需求,也没有一个能处理我的数据结构

我需要沿着数据子集从数据帧中删除NAs,并将剩余的NA值压缩到每个数据子集的行中

例如:

#create example data
a <- c(1, 1, 1, 2, 2, 2) #this is the subsetting variable in the example
b <- c(NA, NA, "B", NA, NA, "C") #max 1 non-NA value for each subset
c <- c("A", NA, NA, "A", NA, NA)
d <- c(NA, NA, 1, NA, NA, NA) #some subsets for some columns have all NA values

dat <- as.data.frame(cbind(a, b, c, d)) 

> desired output
  a b c    d
  1 B A    1
  2 C A <NA>
#创建示例数据

使用dplyr::summary_all
可以实现一个解决方案。数据需要在
a
上按
分组

library(dplyr)

dat %>%
  group_by(a) %>%
  summarise_all(funs(.[which.min(is.na(.))]))
# # A tibble: 2 x 4
#    a      b      c      d     
#   <fctr> <fctr> <fctr> <fctr>
# 1   1      B      A      1     
# 2   2      C      A      <NA>  
库(dplyr)
dat%>%
组别(a)%>%
总结所有(funs([which.min(is.na()]))
##A tibble:2 x 4
#a、b、c、d
#      
#1 B A 1
#2 C A

不确定这是否是您想要的,但这可能适合您。它至少复制了您正在寻找的小样本输出:

library(dplyr)
library(tidyr)

dat %>% 
  filter_at(vars(b:c), any_vars(!is.na(.))) %>% 
  group_by(a) %>% 
  fill(b) %>% 
  fill(c) %>% 
  filter_at(vars(b:c), all_vars(!is.na(.)))

# A tibble: 2 x 4
# Groups:   a [2]
       a      b      c      d
  <fctr> <fctr> <fctr> <fctr>
1      1      B      A      1
2      2      C      A     NA

使用
数据表
na.省略

library(data.table)
merge(setDT(dat)[,a[1],keyby=a], setDT(dat)[,na.omit(.SD),keyby=a],all.x=TRUE)

我认为合并声明可以改进

谢谢!我决定使用这个,因为语法对我来说最有意义。谢谢你的帮助!这确实像预期的那样工作-谢谢!
library(data.table)
merge(setDT(dat)[,a[1],keyby=a], setDT(dat)[,na.omit(.SD),keyby=a],all.x=TRUE)