Extragerea rândurilor din cadrul de date R pe baza factorilor (șiruri de caractere) (Programare, R, Dataframe)

Samuel Tan a intrebat.

Îmi pare rău dacă aceasta este o duplicare, dar se pare că nu pot găsi informațiile în altă parte pe SO, chiar dacă pare o problemă atât de simplă. Am un cadru de date cu mai multe coloane ca factori. Unele dintre acestea sunt numere întregi, iar altele sunt șiruri de caractere. Aș dori să extrag rândurile care corespund unui anumit factor. De exemplu,

my_data <- read.table(file = "my_data.txt", header = TRUE)
my_data[ my_data$age == 20, ]

Acest lucru funcționează, dar dacă încerc apoi

my_data[ my_data$gender == "male", ]

Aceasta nu produce nicio potrivire. Mi-am dat seama că nu sunt același lucru, deoarece verificarea clasei de my_data$name[1] dă un factor, în timp ce eu îl verific cu un șir de caractere.

Aveți vreo idee despre ce greșesc aici?

Salutări

Exemplu de date: Mărime Vârstă Sex Valoare 1 20 bărbați 0,5 4 22 femei 0,7 3 14 femei 0,3

Comentarii

  • Ar trebui să presupunem că ați încercat să folosiți corect [row, col] forma de extragere corectă, ca în my_data[my_data$gender == "male", ]? –  > Por A5C1D2D2H2I1M1N2O1R2T1.
  • Ați putea să ne oferiți o mostră din datele dumneavoastră (de exemplu, dput(head(my_data))? –  > Por matt_k.
  • da, am folosit [row, col] format….Acum mi-am dat seama de greșeala mea….Ar fi trebuit să fac my_data[ my_data$gender == " male ", ] Vedeți diferența? Destul de jenant, într-adevăr. –  > Por Samuel Tan.
2 răspunsuri
LearnR

Încercați să folosiți subset funcție.

Acest site oferă o bună referință: HowtoInR

my_data = subset(my_data, gender == "male")

Comentarii

  • Vă mulțumim pentru răspunsul dumneavoastră. Cu toate acestea, se obține același rezultat. –  > Por Samuel Tan.
  • Ați putea oferi un eșantion de date? –  > Por LearnR.
  • Mulțumesc pentru asta, am găsit problema, vezi comentariul meu de mai sus. Îmi pare rău pentru probleme. Știam că fac ceva greșit. –  > Por Samuel Tan.
  • Acest lucru funcționează chiar și pentru comparația booleană, de exemplu data$x => data$y. –  > Por Mohammed.
Samuel Tan

Acesta este un răspuns la o întrebare veche, dar aș dori să vă împărtășesc modul meu actual de a face lucrurile, în care greșeli de acest gen se întâmplă mult mai rar.

Răspunsul este data.table pachet. Acesta mi-a salvat sute de linii de cod și va continua să facă acest lucru. Subansamblarea devine floare la ureche:

my_data <- data.table(my_data)
my_data[gender == "male" & age <= 20]

Pot să înșir câte condiționale vreau și, de asemenea, să folosesc .SD pentru a trece coloane ca argumente pentru funcții, astfel:

my_data[gender == "male" & age <= 20, lapply(.SD, mean), by = c("nationality", "height")]

Crearea de coloane din coloane existente este mult mai simplă, chiar și crearea mai multor coloane deodată

Tags:,