2 votes

Sélectionner des colonnes spécifiques, où les noms des colonnes sont dans un autre df dans r

Je n'ai pas trouvé de solution dans la pile, alors voici mon problème :

  • J'ai un df avec 342 colonnes.
  • Je veux créer un nouveau df avec seulement des colonnes spécifiques.
  • La liste des colonnes à conserver est dans un autre df, listée en 3 colonnes intitulées X,Y,Z pour 3 nouveaux dataframes.

Voici mon code actuel :

# Read the data:
data <- data.table::fread("data_30_9.csv")

# Import variable names #
variable.names.full = openxlsx::read.xlsx("variables2.xlsx")
Y.variable.names = na.omit(variable.names.full[1])
X.variable.names = na.omit(variable.names.full[2])
Z.variable.names = na.omit(variable.names.full[3])

# Make new DF with only specific columns:
X.Data = data %>% select(as.character(X.variable.names)) # This works as X has only 1 variable
Y.Data = data %>% select(as.character(Y.variable.names)) # This give an error: Error: 
#                                                        # Can't subset columns that don't exist.

Aide ?

les données sont disponibles ici :

  1. https://github.com/amirnakar/TammyA/blob/main/data_30_9.csv
  2. https://github.com/amirnakar/TammyA/blob/main/Variables2.xlsx

3voto

Cettt Points 814

Le problème est que Y.variable.names est un data.frame que vous ne pouvez pas utiliser pour sous-titrer un autre data.frame .

Vous pouvez vérifier en tapant class(Y.variable.names) .

Donc, la solution à votre problème est le sous-ensemble Y.variable.names :

Y.Data = data %>% select(Y.variable.names[,1])

1voto

Ronak Shah Points 24715

Utilisez lapply sur variable.names.full et sélectionnez les colonnes de data .

list_data <- lapply(variable.names.full, function(x) 
                    data[, na.omit(x), drop = FALSE])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X