【问题标题】:r - consolidate rows in dataframe by removing empty spacesr - 通过删除空格来合并数据框中的行
【发布时间】:2018-06-27 09:30:39
【问题描述】:

这个问题与here 类似,但不一样。我有一个来自 OCR 旧文档的非常大且混乱的数据框。它充满了我需要折叠以形成合并行的空值。举个例子:

DF <- data.frame(
  Col1 = c("Egg", "", ""),
  Col2 = c("", "Flour", ""),
  Col3 = c("", "", "Bread"),
  Col4 = c("4", "", ""),
  Col5 = c("", "6", "8")
)

> DF
  Col1  Col2  Col3 Col4 Col5
1  Egg                4     
2      Flour               6
3            Bread         8

如何删除数据框的空值以形成合并行?所需的输出如下所示:

> DF
  Col1    Col2
1  Egg    4     
2  Flour  6
3  Bread  8

实际的数据框非常大,其中包含不同数量的空值的行。

【问题讨论】:

  • 试试:t(apply(DF, 1, function(x) x[x != ""]))
  • 这适用于上面的示例,但不适用于我的实际数据框,不知道为什么。它会生成一个包含太多列的单行数据框...

标签: r dataframe data-cleaning


【解决方案1】:

这是coalesce() 来自dplyr 的选项:

library(dplyr)
DF[DF==""] <- NA # replace empty strings by NA
data.frame(Col1 = coalesce(!!! DF), Col2 = coalesce(!!! rev(DF)))
#   Col1 Col2
#1   Egg    4
#2 Flour    6
#3 Bread    8

【讨论】:

    【解决方案2】:

    然而,另一种实现相同的方法

    library(dplyr)
    
    df<-do.call("paste", DF)%>%as.data.frame()
    
    df<- df%>%
      transmute(x1= df[[1]]%>%str_extract("[A-z]+"),
                x2 = df[[1]]%>%str_extract("\\d+"))
    df
    
    #     x1 x2
    #1   Egg  4
    #2 Flour  6
    #3 Bread  8
    

    @mtoto 仍然值得更多的学分

    【讨论】:

      猜你喜欢
      • 2019-05-15
      • 2016-10-05
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2021-09-18
      • 2016-11-26
      相关资源
      最近更新 更多