[英]Pass dynamic column name to transform() R function
我有一個包含多列的數據框,我想在循環運行時將動態列名傳遞給R transform()函數。 請求
例如
df1 <- data.frame(col1=c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16),
col2=c("id1", "id1", "id1", "id1", "id1", "id1", "id2", "id3", "id3", "id4", "id4", "id4", "id5", "id6", "id7", "id7"),
col3=c(1, 1, 1, 2, 3, 4, 2, 4, 2, 1, 4, 5, 1, 1, 2, 3),
col4=c(3, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 1, 1, 1, 3, 3))
newColN <- "newCol"
colName <- "col3"
transform(df1, newColN = ~colName)
transform()的第二個參數應采用動態列名作為我傳遞的函數的名稱。
我嘗試了以下
transform(df1, as.name(newColN) = -(as.name(colName)))
transform(df1, !!newColN := -(!!colName)
+ )
transform(df1, !!as.name(newColN) := -(!!as.name(colName)))
但看到一個錯誤。
任何有效實現這一目標的建議將不勝感激。
如果您要執行此操作,則transform
實際上不是正確的工具。 建議您改用以下任何一種方法
replace(df1, newColN, -df1[[colName]])
df2 <- df1
df2[[newColN]] <- - df2[[colName]]
within(df1, assign(newColN, - df1[[colName]]))
within(df1, assign(newColN, - get(colName)))
如果您不需要在左側動態定義變量,則transform
仍然可以進行:
transform(df1, newCol = - df1[[colName]])
transform(df1, newCol = - environment()[[colName]])
transform(df1, newCol = - get(colName))
你可能想改變你的transform
,以mutate
在dplyr
使用它會更簡單,以執行這樣的操作。
library(dplyr)
library(rlang)
df1 %>% mutate(!!newColN := get(colName))
# col1 col2 col3 col4 newCol
#1 1 id1 1 3 1
#2 2 id1 1 2 1
#3 3 id1 1 2 1
#4 4 id1 2 2 2
#5 5 id1 3 2 3
#6 6 id1 4 1 4
#7 7 id2 2 1 2
#8 8 id3 4 1 4
#9 9 id3 2 3 2
#10 10 id4 1 3 1
#11 11 id4 4 3 4
#12 12 id4 5 1 5
#13 13 id5 1 1 1
#14 14 id6 1 1 1
#15 15 id7 2 3 2
#16 16 id7 3 3 3
或使用sym
df1 %>% mutate(!!newColN := !!sym(colName))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.