【问题标题】:How to locate a structured region of data inside of a not structured data frame in R?如何在 R 中的非结构化数据框中定位结构化数据区域?
【发布时间】:2016-10-12 20:36:23
【问题描述】:

我有某种包含感兴趣子集的数据框。 问题是这个子集在不同的数据帧之间是不一致的。尽管如此,在更抽象的层次上,遵循一般结构:数据框内的矩形区域。

example1 <- data.frame(x = c("name", "129-2", NA, NA, "acc", 2, 3, 4, NA, NA), 
       y = c(NA, NA, NA, NA, "deb", 3, 2, 5, NA, NA),
       z = c(NA, NA, NA, NA, "asset", 1, 1, 2, NA, NA))

print(example1)

      x    y     z
1   name <NA>  <NA>
2  129-2 <NA>  <NA>
3   <NA> <NA>  <NA>
4   <NA> <NA>  <NA>
5    acc  deb asset
6      2    3     1
7      3    2     1
8      4    5     2
9   <NA> <NA>  <NA>
10  <NA> <NA>  <NA>

example1 包含一个带有结构信息的清晰的矩形区域

5    acc  deb asset
6      2    3     1
7      3    2     1
8      4    5     2

如前所述,区域并不总是一致的,

  1. 列的位置并不总是相同的
  2. 感兴趣的子集中的变量名称并不总是相同

这里是另一个example2

example2 <- data.frame(x = c("name", "129-2", "wallabe #23", NA, NA, "acc", 2, 3, 4, NA ), 
       y = c(NA, NA, NA, NA, "balance", "deb", 3, 2, 5, NA),
       z = c(NA, NA, NA, NA, NA, "asset", 1, 1, 2, NA),
       u = c(NA, NA, NA, "currency:", NA, NA, NA, NA, NA, NA),
       i = c(NA, NA, NA, "USD", "result", "win", 2, 3, 1, NA),
       o = c(NA, NA, NA, NA, NA, "lose", 2, 2, 1, NA))

print(example2)
> example2
            x       y     z         u      i    o
1         name    <NA>  <NA>      <NA>   <NA> <NA>
2        129-2    <NA>  <NA>      <NA>   <NA> <NA>
3  wallabe #23    <NA>  <NA>      <NA>   <NA> <NA>
4         <NA>    <NA>  <NA> currency:    USD <NA>
5         <NA> balance  <NA>      <NA> result <NA>
6          acc     deb asset      <NA>    win lose
7            2       3     1      <NA>      2    2
8            3       2     1      <NA>      3    2
9            4       5     2      <NA>      1    1
10        <NA>    <NA>  <NA>      <NA>   <NA> <NA>

example2 包含一个不清楚的矩形区域

6          acc     deb asset      <NA>    win lose
7            2       3     1      <NA>      2    2
8            3       2     1      <NA>      3    2
9            4       5     2      <NA>      1    1

扫描此数据帧以定位其中的此类区域的一种方法?

感谢任何想法

【问题讨论】:

    标签: r dataframe subset data-cleaning


    【解决方案1】:

    您可能想尝试使用相同数量的NAs 的最长序列:

    findTable <- function(df){
      naSeq <- rowSums(is.na(df))          # How many NA per row
      myRle <- rle(naSeq )$length          # Find sequences length
      df[rep(myRle == max(myRle), myRle),] # Get longest sequence
    }
    
    findTable(example1)
        x   y     z
    5 acc deb asset
    6   2   3     1
    7   3   2     1
    8   4   5     2
    
    findTable(example2)
        x   y     z    u   i    o
    6 acc deb asset <NA> win lose
    7   2   3     1 <NA>   2    2
    8   3   2     1 <NA>   3    2
    9   4   5     2 <NA>   1    1
    

    【讨论】:

    • 绝妙的方法!你能再解释一下这部分函数myRle &lt;- rle(rs)$length“吗?当我在示例中使用它时它不起作用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2011-03-10
    • 2015-10-09
    • 1970-01-01
    • 2019-12-10
    • 2014-11-20
    相关资源
    最近更新 更多