【问题标题】:subsetting an R data.table delimited by empty rows子集由空行分隔的 R data.table
【发布时间】:2020-07-20 03:33:38
【问题描述】:

我正在尝试使用 R 从 excel 文件中提取和清理数据。其中一些 excel 文件包含多个表结构(由空行分隔),我想将它们分成多个 data.tables。

我只是尝试使用以下方法返回完全为空的行的索引:

blankrows <- which(all(is.na(tempdata)), arr.ind = TRUE)

然后我可以用它来对数据进行子集化(“tempdata”是一个 data.table)

如果我只使用is.na(tempdata),我会得到所有具有任何 NA 值的索引(这不是我想要的),但是当我使用all() 时,即使肯定有空行,我也不会得到任何索引.我可能误解了这两个函数中的一个或两个,但我的理解是is.na() 返回一个逻辑变量向量,如果它们都是 true,all() 应该返回 true。

【问题讨论】:

  • 我用all 包装它,它会是一个TRUE/FALSE,然后用which 包装会返回1。按行检查NA 会更容易,然后执行用于拆分数据集。即i1 &lt;- dt[, Reduce(&, lapply(.SD, is.na))] ; split(dt, cumsum(i1))
  • 顺便说一句,| 或 &amp; 周围有反引号。目前尚不清楚您希望以哪种方式拆分,即整行是 NA 还是任何 NA 行
  • 也许可以查看readxl 包,因为它允许在 Excel 中读取矩形数据块?
  • 非常感谢,@akrun!

标签: r data.table subset data-cleaning


【解决方案1】:

我们可以使用is.na 和Reduce 创建一个逻辑索引,通过累积和将split 数据转换为数据集的list 将其转换为数字

i1 <- dt[, Reduce(`&`, lapply(.SD, is.na))] 
split(dt, cumsum(i1))

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 2017-12-23
    • 2017-04-30
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多