首页 > 解决方案 > 是否可以使用转换自引用列

问题描述

是否有一个函数可以在转换中自引用一列,一旦它已经被识别而不重新输入它?

例如,假设您有以下代码片段:

returns = readxl::read_excel(returns_filepath) %>%
    transform(Asset_Class = as.character(Asset_Class)) %>%
    transform(Standardized_Date = as.Date(Standardized_Date)) %>%
    as.data.frame()

在第一次转换调用中,是否有一个函数可以放置在 as.character 调用中,该函数可以转换已经指定的 Asset_Class 列而不第二次指定它?看起来像这样的东西:transform(Asset_Class = as.character(self()))

标签: r

解决方案


within就是有用的东西。用法稍有不同,有大括号、换行,没有逗号。分配通常与<-,但=也有效。

d <- data.frame(matrix(rnorm(15), 5, 3))


d <- within(d, {
  X1.yz <- X1/sum(d)    ## creates `X1.yz`
  X1.yz.sq <- X1.yz^2   ## references X1.yz` 
})
head(d)
#            X1          X2           X3     X1.yz.sq       X1.yz
# 1 -0.02944488  0.69686258 -0.273645701 5.952493e-05  0.00771524
# 2 -0.41386885 -1.05636841 -0.467845325 1.175993e-02  0.10844322
# 3  1.11338602 -0.04069848 -1.238252328 8.510809e-02 -0.29173291
# 4 -0.48099284 -1.55154482 -0.007762034 1.588388e-02  0.12603126
# 5 -0.43316903  1.16716955 -0.800282178 1.288232e-02  0.11350031

推荐阅读