【问题标题】:Unable to delete columns in a data.table无法删除 data.table 中的列
【发布时间】:2014-07-28 16:29:33
【问题描述】:

我有一个包含 2 个级别的 data.frame (df2):主题和时间以及 5 个变量。 因为我想将它与另一个具有完全相同结构相同 id、相同年份的数据帧(df1)合并(但在原始数据帧中,id 和时间是整数)

通常你会删除前两行

a<-df2[,-c(1,2)] 

df1<-cbind(df1,a)

但由于它们是因子水平,R 以某种方式不允许我删除它们。我试图将它们设置为 a.numeric 但这也不起作用。我错过了什么?

这是我的 df2 的结构:

> str(data)
Classes ‘data.table’ and 'data.frame':  2262 obs. of  9 variables:
 $ id          : Factor w/ 87 levels "1","2","3","4",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ time        : Factor w/ 26 levels "1987","1988",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ shares      : num  NA 0.016 0.016 0.016 0.016 0.016 0.016 0.16 0.16 0.159 ...
 $ tacc        : num  NA 38.7 31 50.5 28.7 ...

我想删除整个列 id 和 time

【问题讨论】:

  • df2[,-c(1,2)] 删除前两列。您是否正在寻找droplevels?举个例子,你的问题会更清楚。
  • 我只想删除其中包含因子变量的两列。例如,Library(plm) data(grunfeld) 看起来与我的数据相似
  • “看起来与我的数据相似”与提供重现您试图描述的问题的最小示例并不完全相同。此外,您的问题文本需要编辑。
  • 我真的很困惑为什么 data[,-c(1,2)] 不起作用。这是某种安全功能还是我没有看到任何其他原因导致它不起作用
  • 如果您有一个小的data.frame(使用dput 向我们展示)以及结果应该是什么样子,您将更容易获得答案。你使用的是data.table,所以你必须使用df2[, -c(1,2), with=FALSE]

标签: r data.table


【解决方案1】:

编辑 2020-04-16

data.table 自从最初的问答以来得到了发展——j 中的简单查询,如 1:2'V1',被视为与 data.frame 中的一样——作为列选择标准。

因此,如果DTdata.tabledata.frame,则DT[ , -c(1, 2)] 现在将返回相同的结果。将以下内容留给后代:


问题似乎是您实际上是在尝试在 data.table 上使用 data.frame 语法。

这是一个例子:

library(data.table)
DT <- data.table(id = 1:2, time = 3:4, shares = 5:6, tacc = 7:8)
DT[, -c(1, 2)]
# [1] -1 -2
DT[, -c(1, 2), with = FALSE]
#    shares tacc
# 1:      5    7
# 2:      6    8

DF <- as.data.frame(DT)
DF[, -c(1, 2)]
#   shares tacc
# 1      5    7
# 2      6    8

请注意,使用这样的索引位置并不是最佳做法,只是因为从长远来看它会使代码更加晦涩。

【讨论】:

    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2015-07-07
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多