[英]Is it possible to self-reference a column using transform
是否有一個 function 來自引用轉換中的列,一旦它已經被識別而不重新輸入它?
例如,假設您有以下代碼片段:
returns = readxl::read_excel(returns_filepath) %>%
transform(Asset_Class = as.character(Asset_Class)) %>%
transform(Standardized_Date = as.Date(Standardized_Date)) %>%
as.data.frame()
在第一個轉換調用中,是否有一個 function 可以放置在 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
您可以從mutate
或summarise
上下文中訪問cur_data()
和cur_column()
屬性。
cur_data()
指的是數據框, cur_column()
是選中列的字符串值。 將它們組合起來以捕獲選定的列。
library(dplyr)
df <- tibble(value = rnorm(10))
df %>%
mutate(across(value, list(
foo = ~cur_data()[cur_column()] * 10,
bar = ~paste0(cur_column(), "_", letters[1:10]))
))
Output:
# A tibble: 10 x 3
value value_foo value_bar
<dbl> <dbl> <chr>
1 0.827 8.27 value_a
2 0.694 6.94 value_b
3 -0.536 -5.36 value_c
4 0.847 8.47 value_d
5 0.0894 0.894 value_e
6 -0.639 -6.39 value_f
7 -0.561 -5.61 value_g
8 -0.508 -5.08 value_h
9 1.25 12.5 value_i
10 -1.04 -10.4 value_j
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.