(Enter new column names as string in dplyr's rename function有點相關的問題)字符串函數重命名變量或gsub
等)[R dplyr:</p> <p>在<code>dplyr</code>鏈(<code>%>%</code>),我想用自己的舊名稱的功能來替代多個列名的中間(使用<code>tolower</code>:使用
library(tidyr); library(dplyr)
data(iris)
# This is what I want to do, but I'd like to use dplyr syntax
names(iris) <- tolower(gsub("\\.", "_", names(iris)))
glimpse(iris, 60)
# Observations: 150
# Variables:
# $ sepal_length (dbl) 5.1, 4.9, 4.7, 4.6, 5.0, 5.4, 4.6,...
# $ sepal_width (dbl) 3.5, 3.0, 3.2, 3.1, 3.6, 3.9, 3.4,...
# $ petal_length (dbl) 1.4, 1.4, 1.3, 1.5, 1.4, 1.7, 1.4,...
# $ petal_width (dbl) 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3,...
# $ species (fctr) setosa, setosa, setosa, setosa, s...
# the rest of the chain:
iris %>% gather(measurement, value, -species) %>%
group_by(species,measurement) %>%
summarise(avg_value = mean(value))
我看到
?rename
取參數
replace
作爲
named character vector, with new names as values, and old names as names.
所以,我想:
iris %>% rename(replace=c(names(iris)=tolower(gsub("\\.", "_", names(iris))) ))
但這(一)返回Error: unexpected '=' in iris %>% ...
及(b)要求由名引用從先前操作的數據幀鏈,這在我的實際使用情況下,我不能這樣做。
iris %>%
rename(replace=c( )) %>% # ideally the fix would go here
gather(measurement, value, -species) %>%
group_by(species,measurement) %>%
summarise(avg_value = mean(value)) # I realize I could mutate down here
# instead, once the column names turn into values,
# but that's not the point
# ---- Desired output looks like: -------
# Source: local data frame [12 x 3]
# Groups: species
#
# species measurement avg_value
# 1 setosa sepal_length 5.006
# 2 setosa sepal_width 3.428
# 3 setosa petal_length 1.462
# 4 setosa petal_width 0.246
# 5 versicolor sepal_length 5.936
# 6 versicolor sepal_width 2.770
# ... etc ....
優雅的做法是:'虹膜%>%\'名稱< - \'(,tolower的(GSUB( 「\\」, 「_」,名稱( ))))'(我只是在開玩笑。) – Frank