Vorrei chiamare tidyr::gather()
all'interno di una funzione personalizzata, a cui passo una coppia di variabili di carattere che verranno utilizzate per rinominare le colonne key
e value
. per esempio.Passa la variabile a tidyr's gather per rinominare le colonne chiave/valore?
myFunc <- function(mydata, key.col, val.col) {
new.data <- tidyr::gather(data = mydata, key = key.col, value = val.col)
return(new.data)
}
Tuttavia, questo non funziona come desiderato.
temp.data <- data.frame(day.1 = c(20, 22, 23), day.2 = c(32, 22, 45), day.3 = c(17, 9, 33))
# Call my custom function, renaming the key and value columns
# "day" and "temp", respectively
long.data <- myFunc(mydata = temp.data, key.col = "day", val.col = "temp")
# Columns have *not* been renamed as desired
head(long.data)
key.col val.col
1 day.1 20
2 day.1 22
3 day.1 23
4 day.2 32
5 day.2 22
6 day.2 45
output desiderato:
head(long.data)
day temp
1 day.1 20
2 day.1 22
3 day.1 23
4 day.2 32
5 day.2 22
6 day.2 45
mia comprensione è che gather()
utilizza i nomi delle variabili nudi per la maggior parte gli argomenti (come in questo esempio, utilizzando "key.col"
come il nome della colonna in contrasto con il valore dimemorizzato in key.col
). Ho tentato un certo numero di modi per passare un valore nella chiamata gather()
, ma la maggior parte degli errori di restituzione. Ad esempio, queste tre varianti della chiamata gather()
raggio myFunc
ritorno Error: Invalid column specification
(ignorando, per scopi illustrativi, il parametro value
, che ha un comportamento identico):
gather(data = mydata, key = as.character(key.col) value = val.col)
gather(data = mydata, key = as.name(key.col) value = val.col)
gather(data = mydata, key = as.name(as.character(key.col)) value = val.col)
Come una soluzione, ho solo rinomina le colonne seguenti chiamata a gather()
:
colnames(long.data)[colnames(long.data) == "key"] <- "day"
Ma dato gather()
's funzionalità presunto per rinominare le colonne chiave/valore, come posso fare questo nel gather()
chiamata entro una funzione personalizzata?
Leggere '? Gather' e prestare attenzione alla sezione" Vedere anche ". Quindi, googling il nome della funzione appropriata probabilmente ti porterà [this] (http://stackoverflow.com/q/26429582/324364). – joran