R 汇总数据框以沿子集返回非NA值
希望有人能帮我个忙。我在网上发现了类似的问题,但我所看到的例子都没有一个能完全满足我的需求,也没有一个能处理我的数据结构 我需要沿着数据子集从数据帧中删除NAs,并将剩余的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-
#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)