簡體   English   中英

R:使用粘貼的引用列名

[英]R: Reference column name with paste

我正在嘗試使用給定變量名稱的粘貼來引用我的數據框中的列,並且該列未被識別。 下面是我嘗試使用的示例數據框和變量名稱:

arm <- "ARM"

ex_df <- data.frame(col1 = c("A","B","C"), col2 = c("X","Y","Z"), ARM_1 = c(1,2,3), ARM_2 = c(4,5,6,), ARM_3 = c(7,8,9), ARM_4 = c(0,0,0))

ex_df %>%
    transmute(col1 = col1, col2 = str_to_title(col2), paste0(arm,"_",4) = paste0(arm,"_",1) + paste0(arm,"_",2) + paste0(arm,"_",3)) %>%
    arrange(col1,col2)

Error: unexpected '=' in:
    "col2 = str_to_title(col2),
    paste0(arm,"_",4) = "

所需的輸出應為 ARM_4 = ARM_1 + ARM_2 + ARM_3 並輸出每列值的總和。

謝謝您的幫助。

我們可以使用:=!! - 以及以存儲在arm中的值starts_with的列上的rowSums

library(dplyr)
library(stringr)
ex_df %>%
    transmute(col1 = col1, col2 = str_to_title(col2), 
    !!paste0(arm,"_",4) := rowSums(across(starts_with(arm)), na.rm = TRUE))

-輸出

 col1 col2 ARM_4
1    A    X    12
2    B    Y    15
3    C    Z    18

注意:與+ - 1 相比, rowSums會更好 1)使用na.rm = TRUE處理NA元素,2)當有超過 10 個“ARM”列時使用緊湊選項


如果我們想通過paste獲取列的值

ex_df %>%
    transmute(col1 = col1, col2 = str_to_title(col2), 
   !!paste0(arm,"_",4) := .data[[paste0(arm,"_",1)]] + 
                         .data[[paste0(arm,"_",2)]] + 
                        .data[[paste0(arm,"_",3)]]) %>%
    arrange(col1,col2)

-輸出

 col1 col2 ARM_4
1    A    X    12
2    B    Y    15
3    C    Z    18

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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