r - 是否可以使用转换自引用列
问题描述
是否有一个函数可以在转换中自引用一列,一旦它已经被识别而不重新输入它?
例如,假设您有以下代码片段:
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()))
解决方案
这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