相关疑难解决方法(0)

使用$和列名称向量动态选择数据框列

我希望根据不同的列来订购数据框,一个转弯.我有一个字符向量,其中的相关列名order应该基于:

parameter <- c("market_value_LOCAL", "ep", "book_price", "sales_price", "dividend_yield",
               "beta", "TOTAL_RATING_SCORE", "ENVIRONMENT", "SOCIAL", "GOVERNANCE")
Run Code Online (Sandbox Code Playgroud)

我想循环遍历名称parameter并动态选择要用于order我的数据的列:

Q1_R1000_parameter <- Q1_R1000[order(Q1_R1000$parameter[X]), ]
Run Code Online (Sandbox Code Playgroud)

这里X1:10(因为我有10个项目parameter).


为了使我的示例可重现,请考虑mtcars存储在字符向量中的数据集和一些变量名称cols.当我尝试mtcars使用动态子集选择变量时cols,以与上面(Q1_R1000$parameter[X])相似的方式,未选择该列:

cols <- c("cyl", "am")
mtcars$cols[1]
# NULL
Run Code Online (Sandbox Code Playgroud)

r dataframe r-faq

103
推荐指数
4
解决办法
10万
查看次数

当变量名存储在字符向量中时,选择/分配给data.table

data.table如果变量名存储在字符向量中,如何引用变量?例如,这适用于data.frame:

df <- data.frame(col1 = 1:3)
colname <- "col1"
df[colname] <- 4:6
df
#   col1
# 1    4
# 2    5
# 3    6
Run Code Online (Sandbox Code Playgroud)

如何使用或不使用:=表示法对data.table执行相同的操作?显而易见的事情是dt[ , list(colname)]行不通的(我也没想到).

r data.table

78
推荐指数
3
解决办法
2万
查看次数

将表达式传递给函数以在 data.table 中进行评估以允许内部优化

预读

我在 SO 上浏览了一些材料:

在得到我以前的问题的完美答案后,我试图一劳永逸地了解如何规范地处理data.tables函数。

潜在问题

我最终想要的是创建一个函数,该函数将一些R表达式作为输入并在 a 的上下文中对它们进行评估data.table(在 theijpart 中)。引用的答案告诉我,get/eval/substitute如果我的输入变得比单列更复杂,我必须使用某种组合(在这种情况下,我可以接受..stringwith = FALSE方法 [1])。

我的真实数据相当大,所以我担心计算时间。

最终,如果我想拥有完全的灵活性(即传递表达式而不是裸列名称),我明白我必须采取一种eval方法:

代码讲了一千个字,所以让我们来说明我到目前为止的发现:

设置

library(data.table)
iris <- copy(iris)
setDT(iris)
Run Code Online (Sandbox Code Playgroud)

主力功能

my_fun <- function(my_i, my_j, option_sel = 1, my_data = iris, by = NULL) {
   switch(option_sel,
      {
         ## option 1 - base R deparse
         my_data[eval(parse(text = deparse(substitute(my_i)))), 
                 eval(parse(text …
Run Code Online (Sandbox Code Playgroud)

r data.table

7
推荐指数
1
解决办法
117
查看次数

标签 统计

r ×3

data.table ×2

dataframe ×1

r-faq ×1