【问题标题】:Dealing with ambiguous column names in data.table处理 data.table 中不明确的列名
【发布时间】:2015-01-09 17:42:44
【问题描述】:

我正在将 Excel 文件中的数据读取到 R 中的 data.table 中。该文件的格式如下:

   COL_1_STUFF COL_2_STUFF COL_3_STUFF
ID EST MOE PCT EST MOE PCT EST MOE PCT

也就是说,对于每个变量(COLs),都有一个估计值、一个误差范围和一个给定的百分比。

问题是由read.xlsx2 造成的,我用它来导入文件,如下所示:

data <- as.data.table(read.xlsx2(
  "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L))

问题是read.xlsx2 为一堆东西分配了相同的列名——导入看起来像:

ID EST EST EST

即使我设置header = FALSE,我也很容易得到类似的东西

X1 X2 X2 X2

为了避免这种情况,我在导入后做了以下操作:

data[ , c("col1_est", "EST") := .(EST, NULL)]
data[ , c("col2_est", "EST") := .(EST, NULL)]
data[ , c("col3_est", "EST") := .(EST, NULL)]

这让我觉得处理问题的方式很奇怪;任何人都可以建议另一种方法吗?

【问题讨论】:

  • 也许您可以尝试将您的 Excel 文件转换为 csv 并使用 data.table 的fread 将数据读入 R。
  • 听起来您正在处理多行标题。你希望输出是什么样的?
  • @KFB 我想到了,但我想找到一个不涉及的解决方案——对我来说不是这样,但我可以想象有人拥有大量文件像我一样格式化,正在寻找程序化解决方案
  • @AnandaMahto 是的,这就是我要找的词汇!只要我可以成功导入数据框/数据表对象而没有模糊命名的列,我就可以在 R 中处理其余的清理/操作。

标签: r data.table heading


【解决方案1】:

这可以通过 freaddata.tablesetDTcheck.names 参数来完成:

DT <- read.xlsx2(
  "file.xlsx", sheetIndex = 1L, colIndex = c(1L, 4L, 7L), startRow = 2L)
)
setDT(DT, check.names = TRUE)

自动将.1.2 等添加到重复的列名中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2018-01-21
    • 2020-11-28
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    相关资源
    最近更新 更多