我有一个数据框:

   Number Superclass                                Class                                      Subclass                                      
    <dbl> <chr>                                     <chr>                                      <chr>                                         
 1      3 NA                                        Class: Benzene and substituted derivatives NA                                            
 2      3 Superclass: Benzenoids                    NA                                         NA 
 3      4 Superclass: Painkiller                    NA                                         NA

我想要平整数据帧并向上合并,以便在同一行上有超类、类和子类:

   Number Superclass                                Class                                      Subclass                                      
    <dbl> <chr>                                     <chr>                                      <chr>                                         
 1      3 Superclass: Benzenoids                    Class: Benzene and substituted derivatives NA                                            
 2      4 Superclass: Painkiller                    NA                                         NA

我试过了

df%>%
  group_by(Number) %>%
  summarise_all(na.omit)

但它只包括所有三个类都存在的行,并删除只有一个超类或超级AND类的任何行

推荐答案

按‘number’分组summarise across(_all/_at/_if个不推荐使用across)其余列(everything()),判断if all值为NA,然后得到first元素,否则paste非NA元素toString(逗号分隔值)

library(dplyr)
df%>%
  group_by(Number) %>%
  summarise(across(everything(), ~ if(all(is.na(.x))) first(.x) 
      else toString(.x[complete.cases(.x)])))

-输出

# A tibble: 2 × 4
  Number Superclass             Class                                      Subclass
   <int> <chr>                  <chr>                                      <lgl>   
1      3 Superclass: Benzenoids Class: Benzene and substituted derivatives NA      
2      4 Superclass: Painkiller <NA>                                       NA      

数据

df <- structure(list(Number = c(3L, 3L, 4L), Superclass = c(NA, "Superclass: Benzenoids", 
"Superclass: Painkiller"), Class = c("Class: Benzene and substituted derivatives", 
NA, NA), Subclass = c(NA, NA, NA)), class = "数据.frame", row.names = c("1", 
"2", "3"))

R相关问答推荐

如何使下一个按钮只出现在Rshiny 的一段时间后?""

使用R闪光显示所有数据点作为默认设置

R中的哈密顿滤波

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

计算直线上点到参考点的总距离

KM估计的差异:SvyKm与带权重的调查

在数据帧列表上绘制GGPUP

如何在PDF格式的kableExtra表格中显示管道字符?

来自程序包AFEX和amp;的类/函数和NICE_TABLE&冲突

R中Gamma回归模型均方误差的两种计算方法不一致

当每个变量值只能 Select 一次时,如何从数据框中 Select 两个变量的组合?

使用ifElse语句在ggploy中设置aes y值

对R中的列表列执行ROW Mean操作

如何从嵌套数据中自动创建命名对象?在R中

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

将数据从一列转换为按组累计计数的单个虚拟变量

R:使用ApexCharge更改标签在饼图中的位置

我怎么才能把一盘棋变成一盘棋呢?

Ggplot2水平线和垂直线的图例图标不匹配

如何系统地根据柱的位置对柱进行操作?