我正在尝试将几个文件放在一起,并且需要对在循环内创建的列名进行一堆合并。我可以很好地使用,data.frame()
但是在使用类似的代码时遇到问题data.table()
:
library(data.table)
df1 <- data.frame(id = 1:20, col1 = runif(20))
df2 <- data.frame(id = 1:20, col1 = runif(20))
newColNum <- 5
newColName <- paste('col',newColNum ,sep='')
df1[,newColName] <- runif(20)
df2 <- merge(df2, df1[,c('id',newColName)], by = 'id', all.x = T) # Works fine
######################
dt1 <- data.table(id = 1:20, col1 = runif(20))
dt2 <- data.table(id = 1:20, col1 = runif(20))
newColNum <- 5
newColName <- paste('col',newColNum ,sep='')
dt1[,newColName] <- runif(20)
dt2 <- merge(dt2, dt1[,c('id',newColName)], by = 'id', all.x = T) # Doesn't work
有什么建议么?
这实际上与无关merge()
,并且与j
(默认情况下)由解释索引(即列)的方式有关[.data.table()
。
您可以通过设置来使整个语句正常工作with=FALSE
,这将导致对j
索引的解释与在a中的解释相同data.frame
:
dt2 <- merge(dt2, dt1[,c('id',newColName), with=FALSE], by = 'id', all.x = T)
head(dt2, 3)
# id col1 col5
# 1: 1 0.4954940 0.07779748
# 2: 2 0.1498613 0.12707070
# 3: 3 0.8969374 0.66894157
更确切地说,来自?data.table
:
with:默认情况下,“ with = TRUE”,“ j”在“ x”框架内求值。列名称可用作变量。当“ with = FALSE”时,“ j”是要选择的名称或位置的向量。
请注意,可以通过将列存储在变量中来避免这种情况,如下所示:
cols = c('id', newColName)
dt1[ , ..cols]
..
信号以“查找一个级别”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句