r - 从 R 数据框中的第一个非 NA 值创建“行”
问题描述
我想创建一个“行”,其中包含出现在数据框中的第一个非 NA 值。例如,给定这个测试数据框:
test.df <- data.frame(a=c(11,12,13,14,15,16),b=c(NA,NA,23,24,25,26), c=c(31,32,33,34,35,36), d=c(NA,NA,NA,NA,45,46))
test.df
a b c d
1 11 NA 31 NA
2 12 NA 32 NA
3 13 23 33 NA
4 14 24 34 NA
5 15 25 35 45
6 16 26 36 46
我知道我可以像这样检测到非 NA 的第一次出现:
first.appearance <- as.numeric(sapply(test.df, function(col) min(which(!is.na(col)))))
first.appearance
[1] 1 3 1 5
这告诉我第 1 列中的第一个元素不是 NA,第 2 列中的第三个元素不是 NA,第 3 列中的第一个元素不是 NA,第 4 列中的第五个元素不是 NA。但是当我把这些碎片放在一起时,它会产生这个(这是合乎逻辑的,但不是我想要的):
> test.df[first.appearance,]
a b c d
1 11 NA 31 NA
3 13 23 33 NA
1.1 11 NA 31 NA
5 15 25 35 45
我希望输出是每列中的第一个非 NA。这样做的基础或dplyr
方法是什么?我没有看到它。提前致谢。
a b c d
1 11 23 31 45
解决方案
我们可以用
library(dplyr)
test.df %>%
slice(first.appearance) %>%
summarise_all(~ first(.[!is.na(.)]))
# a b c d
#1 11 23 31 45
或者它可以是
test.df %>%
summarise_all(~ min(na.omit(.)))
# a b c d
#1 11 23 31 45
或与colMins
library(matrixStats)
colMins(as.matrix(test.df), na.rm = TRUE)
#[1] 11 23 31 45
推荐阅读
- c# - Jquery/Ajax 更新表[ASP.NET Core MVC]
- java - Java Pattern 匹配一个字符串,然后匹配任何字符,直到一个特定的字符
- python - 使用 Pandas 从另一列中查找满足某一列条件的值范围
- jquery - 如何使用 JQuery 将表 TR 元素与另一个 TR 切换
- python - 所有协变量的生命线危险比 = 1
- css - 移动 Chrome 上的 Web 响应问题
- android - Resources$NotFoundException 获取颜色 - Android Kotlin
- kubernetes - 当两个应用程序都使用相同的nodePort时,在kubernetes中部署应用程序的多个实例
- sql-server - 将oracle查询的日期格式转换为sql server查询
- jenkins - 如何通过詹金斯在电子邮件警报中发布断言失败