Ich habe einen gemischten Datenrahmen aus Zeichen und numerischen Variablen.
city,hs_cd,sl_no,col_01,col_02,col_03
Austin,1,2,,46,Female
Austin,1,3,,32,Male
Austin,1,4,,27,Male
Austin,1,5,,20,Female
Austin,2,2,,42,Female
Austin,2,1,,52,Male
Austin,2,3,,25,Male
Austin,2,4,,22,Female
Austin,3,3,,30,Female
Austin,3,1,,65,Female
Ich möchte alle Kleinbuchstaben im Datenrahmen in Großbuchstaben konvertieren. Gibt es eine Möglichkeit, dies auf einmal zu tun, ohne es wiederholt über jede Zeichenvariable zu tun?
Aus dem
dplyr
Paket können Sie diemutate_all()
Funktion auch in Kombination mit verwendentoupper()
. Dies wirkt sich sowohl auf Zeichen- als auch auf Faktorklassen aus.library(dplyr) df <- mutate_all(df, funs=toupper)
quelle
mutate_each()
abgeschrieben wird.data.frame
Verwenden Sie stattdessen (vorausgesetzt, Sie möchten Ihr gesamtes in obere / untere konvertieren )mutate_all()
.mutate_all(df, .funs = toupper)
dass Sie die richtige Syntax verwenden, da sonst eine Fehlermeldung angezeigt wird. Es sollte ein "." vor demfuns
Parameter. Wenn Sie sich an das halten möchten,tidyverse
können Sie auch dasstringr
str_to_upper
anstelle des verwendenbase
toupper
.Es ist einfach mit Apply-Funktion in R.
f <- apply(f,2,toupper)
Sie müssen nicht überprüfen, ob die Spalte ein Zeichen oder ein anderer Typ ist.
quelle
Ein Nebenkommentar hier für diejenigen, die eine dieser Antworten verwenden. Jubas Antwort ist großartig, da es sehr selektiv ist, wenn Ihre Variablen entweder aus Zahlen oder Zeichenfolgen bestehen. Wenn Sie jedoch eine Kombination haben (z. B. a1, b1, a2, b2) usw. Die Zeichen werden nicht richtig konvertiert.
Wie @Trenton Hoffman bemerkt,
library(dplyr) df <- mutate_each(df, funs(toupper))
wirkt sich sowohl auf Zeichen- als auch auf Faktorklassen aus und funktioniert für "gemischte Variablen"; Wenn Ihre Variable beispielsweise sowohl ein Zeichen als auch einen Zahlenwert enthält (z. B. a1), werden beide in einen Faktor konvertiert. Insgesamt ist dies kein allzu großes Problem, aber wenn Sie am Ende beispielsweise Match Data.frames wünschen
df3 <- df1[df1$v1 %in% df2$v1,]
Wenn df1 konvertiert wurde und df2 einen nicht konvertierten data.frame oder ähnliches enthält, kann dies einige Probleme verursachen. Die Lösung besteht darin, dass Sie kurz laufen müssen
df2 <- df2 %>% mutate_each(funs(toupper), v1) #or df2 <- df2 %>% mutate_each(df2, funs(toupper)) #and then df3 <- df1[df1$v1 %in% df2$v1,]
Wenn Sie mit Genomdaten arbeiten, ist dies hilfreich, wenn Sie wissen, dass dies nützlich sein kann.
quelle
Wenn Sie sich mit data.frames befassen müssen, die Faktoren enthalten, können Sie Folgendes verwenden:
df = data.frame(v1=letters[1:5],v2=1:5,v3=letters[10:14],v4=as.factor(letters[1:5]),v5=runif(5),stringsAsFactors=FALSE) df v1 v2 v3 v4 v5 1 a 1 j a 0.1774909 2 b 2 k b 0.4405019 3 c 3 l c 0.7042878 4 d 4 m d 0.8829965 5 e 5 n e 0.9702505 sapply(df,class) v1 v2 v3 v4 v5 "character" "integer" "character" "factor" "numeric"
Verwenden Sie mutate_each_, um Faktoren in Zeichen umzuwandeln, und konvertieren Sie dann alle in Großbuchstaben
upper_it = function(X){X %>% mutate_each_( funs(as.character(.)), names( .[sapply(., is.factor)] )) %>% mutate_each_( funs(toupper), names( .[sapply(., is.character)] ))} # convert factor to character then uppercase
Gibt
upper_it(df) v1 v2 v3 v4 1 A 1 J A 2 B 2 K B 3 C 3 L C 4 D 4 M D 5 E 5 N E
Während
sapply( upper_it(df),class) v1 v2 v3 v4 v5 "character" "integer" "character" "character" "numeric"
quelle
Eine andere Alternative besteht darin, eine Kombination von
mutate_if()
und einestr_to_uper()
Funktion aus dem tidyverse-Paket zu verwenden:Dadurch werden alle Zeichenfolgenvariablen im Datenrahmen in Großbuchstaben konvertiert.
str_to_lower()
mach das Gegenteil.quelle
Wenn Sie nur eine bestimmte Zeile in Großbuchstaben konvertieren möchten, verwenden Sie alternativ den folgenden Code:
df[[1]] <- toupper(df[[1]])
quelle