簡體   English   中英

是否可以使用轉換自引用列

[英]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

您可以從mutatesummarise上下文中訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM