我有一个包含许多NAs的长数据帧,但我想将其压缩,以便在按变量分组时,所有NAs都填充第一个非缺失值——但如果观测值only包含NAs,它会保留它.在我更新R之前,我有一个代码可以运行(如下所示),但现在如果其中一列都是NAs,它会删除行.

以下是一个示例数据集:

library(dplyr)

test <- tibble(name = c("J", "C", "J", "C"),
               test_1 = c(1:2, NA, NA),
               test_2 = c(NA, NA, 3:4),
               make_up_test = c(NA, 1, NA, NA))

这里是过go 的工作原理——但现在删除了一列中只有NAs的观察结果(参见J被删除,因为他只有NAs用于测试观察)


test %>%
  group_by(name) %>%
  summarise_all(~first(na.omit(.)))

这就是我希望得到的:

solution <- tibble(name = c("J", "C"),
                test_1 = c(1:2),
                test_2 = c(3:4),
                make_up_test = c(NA, 1))

推荐答案

我们用na.omitgo 掉NA,得到first元素——如果不存在非NA元素,用[1]强制为NA

library(dplyr)
test %>% 
  group_by(name) %>% 
  summarise(across(everything(), ~ first(na.omit(.x))[1]))

-输出

# A tibble: 2 × 4
  name  test_1 test_2 make_up_test
  <chr>  <int>  <int>        <dbl>
1 C          2      4            1
2 J          1      3           NA

R相关问答推荐

R的法国工作日

如何生成包含可能条目列表而不是计数的表?

如何提高以键ID为列的表中键查找的效率?

我可以截断10字节的扩展数并转换为8字节的double吗?

使用lapply的重新定位功能

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

R中的子集文件—读取文件名索引为4位数字序列,例如0001到4000,而不是1到4000)

基于多列将值链接到NA

R for循环返回到先前值

是否可以创建一个ggplot与整洁判断的交互作用

从BRM预测价值

如何指定我的函数应该查找哪个引用表?

按多列统计频次

识别连接的子网(R-igraph)

更新R中的数据表(使用data.table)

列名具有特殊字符时的循环回归

在gggraph中显示来自不同数据帧的单个值

如何在PrePlot()中将多个元素设置为斜体

网络抓取新闻标题和时间

我需要使用ggplot2制作堆叠条形图