【问题标题】:fread() with dataset when there's missing column [duplicate]缺少列时带有数据集的 fread() [重复]
【发布时间】:2017-07-05 14:23:47
【问题描述】:

我正在使用 fread() 来获取这样的数据:

fread(data, select = c("col1", "col2", "missing", "col3"))

名称为“missing”的列不存在。 fread() 将自动删除“缺失”列并返回数据集,如下所示:

col1   col2   col3 
a      b      c
d      e      f

...

我想知道是否有办法将结果更改为:

col1   col2   missing  col3
a      b      NA       c
d      e      NA       f

【问题讨论】:

  • 您可以考虑在阅读结果后手动添加空行。
  • 我假设我们正在尝试在一个循环中读取多个文件,然后在某些文件的列名可能不匹配时将它们组合起来,如果是这样,请参阅this post。我们可以在 lapply 循环中读取所有内容,然后使用 fill 进行 rbind。
  • @zx8754 完美解决了我的问题!谢谢

标签: r data.table fread


【解决方案1】:

这个问题被标记为data.table 和fread,但吸引了a base R answer。因此,我觉得有必要发布一个data.table 解决方案。

OP 希望在 data.table 内的特定位置添加特定列,该列似乎缺失。 OP 似乎期望 fread() 的 select 参数可用于此目的,但 fread() 确实打印了一个

警告信息:
在 fread("col1 col2 col3 \na b c\nd e f", :
在列名标题中找不到列名“缺失”(区分大小写),正在跳过。

因此必须在之后添加缺少的列:

library(data.table)

# add column by reference
DT[, missing := NA][]
   col1 col2 col3 missing
1:    a    b    c      NA
2:    d    e    f      NA
# rearrange column order
setcolorder(DT, c("col1", "col2", "missing", "col3"))[]
   col1 col2 missing col3
1:    a    b      NA    c
2:    d    e      NA    f

注意data.table通过引用执行这两个操作,即不需要复制整个对象来添加单个列或更改属性。

数据

library(data.table)
DT <- fread(
"col1   col2   col3 
a      b      c
d      e      f",
select = c("col1", "col2", "missing", "col3"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2018-04-28
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 2019-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多