Você não pode fazer esse tipo de subconjunto com $
. No código-fonte ( R/src/main/subset.c
) afirma:
/ * O operador $ subconjunto.
Precisamos ter certeza de avaliar apenas o primeiro argumento.
O segundo será um símbolo que precisa ser correspondido, não avaliado.
* /
Segundo argumento? O que?! Você tem que perceber que $
, como tudo na R, (incluindo, por exemplo (
, +
, ^
etc) é uma função, que leva argumentos e é avaliada. df$V1
poderia ser reescrito como
`$`(df , V1)
ou de fato
`$`(df , "V1")
Mas...
`$`(df , paste0("V1") )
... por exemplo, nunca funcionará, nem qualquer outra coisa que deve primeiro ser avaliada no segundo argumento. Você só pode passar uma string que nunca é avaliada.
Em vez disso, use [
(ou [[
se quiser extrair apenas uma coluna como um vetor).
Por exemplo,
var <- "mpg"
#Doesn't work
mtcars$var
#These both work, but note that what they return is different
# the first is a vector, the second is a data.frame
mtcars[[var]]
mtcars[var]
Você pode realizar a ordenação sem loops, usando do.call
para construir a chamada para order
. Aqui está um exemplo reproduzível abaixo:
# set seed for reproducibility
set.seed(123)
df <- data.frame( col1 = sample(5,10,repl=T) , col2 = sample(5,10,repl=T) , col3 = sample(5,10,repl=T) )
# We want to sort by 'col3' then by 'col1'
sort_list <- c("col3","col1")
# Use 'do.call' to call order. Seccond argument in do.call is a list of arguments
# to pass to the first argument, in this case 'order'.
# Since a data.frame is really a list, we just subset the data.frame
# according to the columns we want to sort in, in that order
df[ do.call( order , df[ , match( sort_list , names(df) ) ] ) , ]
col1 col2 col3
10 3 5 1
9 3 2 2
7 3 2 3
8 5 1 3
6 1 5 4
3 3 4 4
2 4 3 4
5 5 1 4
1 2 5 5
4 5 3 5
Se bem entendi, você tem um vetor contendo nomes de variáveis e gostaria de percorrer cada nome e classificar seu quadro de dados por eles. Nesse caso, este exemplo deve ilustrar uma solução para você. A questão primordial na sua (a exemplo completo não está completo assim que eu "m não tenho certeza o que mais você pode estar ausente) é que ele deve ser
order(Q1_R1000[,parameter[X]])
, em vez deorder(Q1_R1000$parameter[X])
, uma vez parâmetro é um objeto externo que contém um nome de variável oposição a uma coluna direta do seu quadro de dados (que quando$
seria apropriado).fonte
Usar dplyr fornece uma sintaxe fácil para classificar os quadros de dados
Pode ser útil usar a versão NSE conforme mostrado aqui para permitir a construção dinâmica da lista de classificação
fonte
Outra solução é usar #get:
fonte
Teve problema semelhante devido a alguns arquivos CSV que tinham vários nomes para a mesma coluna.
Esta foi a solução:
Escrevi uma função para retornar o primeiro nome de coluna válido em uma lista e usei isso ...
fonte
se você quiser selecionar uma coluna com um nome específico, basta fazer
você pode executá-lo em um loop ou de forma reversa para adicionar o nome dinâmico, por exemplo, se A for um quadro de dados e xyz for a coluna a ser nomeada como x então eu faço assim
novamente, isso também pode ser adicionado em loop
fonte
fonte
tarde demais .. mas acho que tenho a resposta -
Aqui está meu exemplo de dataframe study.df -
E depois -
fonte