Ho un frame di dati che contiene sia colonne numeriche e non numerici, diconoselezionare colonne numeriche e una colonna specificati dal nome dalla data frame
df <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20],v5=letters[1:20])
Per selezionare solo le colonne non numerici userei
fixCol <- !sapply(df,is.numeric)
Ma ora voglio anche includere una colonna numerica specifica, ad esempio v2. Il mio frame di dati è molto grande e l'ordine delle colonne cambia, quindi non posso indicizzarlo usando un numero, voglio davvero usare il nome 'v2'. Ho provato
fixCol$v2 = TRUE
ma che mi dà l'avvertimento In fixCol$FR = TRUE : Coercing LHS to a list
che rende impossibile al sottoinsieme il mio telaio dati originali per ottenere solo fixCol
df[,fixCol]
dà: Error in .subset(x, j) : invalid subscript type 'list'
Alla fine il mio obiettivo è per ridimensionare tutte le colonne numeriche del mio frame di dati eccetto questa colonna specificata, usando qualcosa come questo
scaleCol = !fixCol
df_scaled = cbind(df[,fixCol], sapply(df[,scaleCol],scale))
Come posso fare al meglio?
questo funziona alla grande, grazie! Come faccio a creare df2 che contiene tutte le colonne NON inserite in df1, senza invertire l'intera affermazione? Ho provato df2 <- df [,! Names (df1)] o df2 <- df [, - c (nomi (df1))] ma entrambi danno un errore. Ho bisogno anche di df2 per poter scalare df2 e metterlo in un nuovo dataframe insieme a df1. – Ciska
@Ciska Possiamo usare 'setdiff' o'% in% 'i.e. df2 <- df [setdiff (nomi (df), nomi (df1))]' – akrun
Grazie a @akrun! Funziona alla grande – Ciska