data.table :: set与其他data.frame交互

时间:2018-09-19 09:32:10

标签: r data.table

在尝试替换data.frame中的NA时,我发现data.table::set()的行为很奇怪。我不习惯使用data.table语法,但是set()也应该适用于data.frame

以下代码显示了问题:

set.seed(123)
data <- data.frame(replicate(5,sample(c(1,NA),5,rep=TRUE)))

dt <- as.data.table(data)
dt_red <- dt[-1, -2]

df <- data
df_red <- df[-1, -2]

sum(is.na(data))
sum(is.na(dt))
sum(is.na(dt_red))
sum(is.na(df))
sum(is.na(df_red))

ind <- as.integer(c(2,3))
for (j in ind)
  set(data,which(is.na(data[[j]])),j,0) 

sum(is.na(data))
sum(is.na(dt))
sum(is.na(dt_red))
sum(is.na(df))
sum(is.na(df_red))

该函数应该用0替换数据中第2列和第3列中的NA。它也替换了df中的NA,这实际上是不应该的。如果将数据安全地保存为data.table或对其进行修改,则什么都不会改变...

有什么想法吗?

P.S。 这篇文章不是关于如何更改脚本以使其正常工作(我做到了),而是帮助我意识到如何set()被允许更改df,而只被赋予data一起工作?

0 个答案:

没有答案