相关疑难解决方法(0)

如何在R中的data.table中完全使用变量中的列名

首先:感谢@MattDowle; data.table是我开始使用以来发生过的最好的事情之一R.

第二:我知道变量列名的各种用例的许多变通方法data.table,包括:

  1. 选择/赋值data.table变量,这些变量名称存储在字符向量中
  2. 使用R中的变量在data.table中传递列名
  3. 通过保存在变量中的名称引用data.table列
  4. 以编程方式将列名称传递给data.table
  5. Data.table元编程
  6. 如何编写一个调用调用data.table的函数的函数?
  7. 在`data.table`中使用动态列名
  8. data.table,R中的动态列名
  9. 使用以下内容分配多个列:= data.table,group
  10. 使用data.table在"group by"操作中设置列名
  11. R使用data.table汇总多个列

可能更多我没有参考.

但是:即使我学会了上面记录的所有技巧,以至于我从来不必查看它们以提醒自己如何使用它们,我仍然会发现使用作为参数传递给函数的列名非常繁琐的任务.

我正在寻找的是以下解决方法/工作流程的"最佳实践认可"替代方案.考虑到我有一堆类似数据的列,并希望对这些列或它们的集合执行一系列类似的操作,其中操作具有任意高的复杂性,并且列名称组传递给指定的每个操作在变量中.

我意识到这个问题听起来很人为,但我却以惊人的频率遇到它.这些例子通常非常混乱,很难将与这个问题相关的功能分开,但我最近偶然发现了一个相当简单的简化用作MWE的方法:

library(data.table)
library(lubridate)
library(zoo)

the.table <- data.table(year=1991:1996,var1=floor(runif(6,400,1400)))
the.table[,`:=`(var2=var1/floor(runif(6,2,5)),
                var3=var1/floor(runif(6,2,5)))]

# Replicate data across months
new.table <- the.table[, list(asofdate=seq(from=ymd((year)*10^4+101),
                                           length.out=12,
                                           by="1 month")),by=year]

# Do a complicated procedure to each variable in some group.
var.names <- c("var1","var2","var3")

for(varname in var.names) {
    #As suggested in an answer to Link 3 above
    #Convert the column name to a …
Run Code Online (Sandbox Code Playgroud)

r calculated-columns programmatically-created data.table

48
推荐指数
2
解决办法
4740
查看次数

data.table:为什么不能总是直接传递列名?

开始使用该data.table包(作者/维护者:Matt Dowle).很棒的套餐.我喜欢我可以写,dt[, x1]而不是说,dt[, dt$x1]或者df["x1"],对于data.table dt,列名x1,data.frame df.能够直接传递列名是data.table的一个有吸引力的特性.但是在列名称周围省略引号(写x1而不是"x1")并不总是可行的.为什么?

编程问题:是否有任何理由不能始终将列名向量直接传递给data.table或包提供的辅助函数?例如,subset,merge,和melt功能已被改写为data.table包,但同时subset可以直接处理的列名,mergemelt不能(见下文).

澄清一下,我的问题不是何时如何,而是为什么.有非常有用的提示有很好的相关讨论,例如,选择/分配给data.table变量,这些变量名称存储在字符向量中,r - 将变量作为data.table列名称传递.有了这些答案和一些试验和错误,我就能找到报价/不引用区别的方法.我的问题是为什么目前不可能总是省去列名称的引号:它有设计吗?这是一个过渡性的情况吗?有编程困难吗?

下面,为了清楚起见,我举一些例子并对这些例子进行编号

# load the package
library("data.table") # because I cannot do install.packages(data.table)!!
Run Code Online (Sandbox Code Playgroud)

(一世)

# make a data.table
set.seed(1)
dt <- data.table(id = 1:5, x1 = 1:5, x2 = 5:1, x3 = …
Run Code Online (Sandbox Code Playgroud)

r data.table

17
推荐指数
1
解决办法
8155
查看次数