【问题标题】:Make a data.table out of two data.table, with the name of column[2], different用两个data.table制作一个data.table,名称为column[2],不同
【发布时间】:2021-03-10 02:03:52
【问题描述】:

运行我提供的代码时,我收到以下警报:

第 1 项中缺少第 2 项的第 2 列 ['t2']。使用 fill=TRUE 填充 使用 NA(列表列为 NULL),或使用.names=FALSE 忽略列 名字。 use.names='check' (从 v1.12.2 开始默认)发出此消息并 就好像 use.names=FALSE 一样进行,以实现向后兼容性。查看新闻 v1.12.2 中的第 5 项,用于控制此消息的选项。

如何改正?

library(data.table)
DT = data.table(Smp=1:9,
                s=as.character(seq(as.POSIXct("2020-01-01"), by = "1 sec",length.out = 9)),
                x=rep(c("b","a","c"),each=3), y=c(1,3,6))
DT2=data.table(Smp=1:9,
               t2=as.character(seq(as.POSIXct("2020-01-02"), by = "1 sec",length.out = 9)),
               x=rep(c("h","j","a"),each=3), y=c(2,5,8))
#seq(as.POSIXct("2001-01-01 04:15:20 "), by = "1 sec",length.out = 9)

tmp_dir = tempdir()
setwd(tmp_dir)
getwd()
fwrite(DT, "file2020-1.csv")
fwrite(DT2,"file2020-2.csv")

#fread("file2020-1.csv")
#fread("file2020-2.csv")

files = list.files(pattern="*.csv")#path=tmp_dir
files
rDT = rbindlist(lapply(files[c(1,2)],fread,fill=TRUE,stringsAsFactors=FALSE,check.names = T))
#2
l <- lapply(files[c(1,2)], fread,fill=TRUE,stringsAsFactors=FALSE,check.names = T)
dt <- rbindlist( l )

data.table 最初每个有 207 列

【问题讨论】:

    标签: r data.table fread


    【解决方案1】:

    警告是因为您在两个数据框中有不同的列名,它们在合并为一个时不匹配。

    您可以在两个数据框中使用相同的名称,这样可以避免警告。

    library(data.table)
    
    cols <- c('Smp', 's','x', 'y')
    rDT = rbindlist(lapply(files[c(1,2)], function(x) 
      setnames(fread(x, fill=TRUE,stringsAsFactors=FALSE,check.names = TRUE), cols)))
    

    【讨论】:

    • 谢谢,已删除警报!现在 data.table 最初每个有 207 列,并且在列 [2] 中,名称在文件的创建日期和时间方面有所不同。有没有办法用 fread 改名字?
    • 我不确定您是否可以更改fread 中的特定列,您可以传递整个列名向量。同样使用setnames,您可以更改特定位置的特定列名。例如,第二个位置 - rbindlist(lapply(files[c(1,2)], function(x) setnames(fread(x, fill=TRUE,stringsAsFactors=FALSE,check.names = TRUE), 2, 's')))
    • 在 fread 中可以使用 drop = "last",跳过最后一列吗?
    • drop 采用需要删除的列名的多个字符向量。 select 也一样。我认为没有 drop = "last" 这样的东西。如果您知道数据中有多少列,您可以使用drop = 10 删除第 10 列。
    猜你喜欢
    • 2023-03-27
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2017-12-01
    • 1970-01-01
    • 2015-07-04
    相关资源
    最近更新 更多