2016-04-27 11 views
0

Ich habe einen Beispieldatensatz 'A' wie folgt Umbenennen:eine kategorische Variable basierend auf den Werten der anderen Variablen in R

> a 
    group marks upd class 
1  T  2 up  A 
2  C  3 up <NA> 
3  C  4 down  B 
4  T  5 up <NA> 
5  T  6 down  D 
6  C  7 up <NA> 
7  T  1 down <NA> 
8  T  0 down  G 

hier für jede Gruppe (T oder C) gibt es Aufzeichnungen in 'Klasse' Variable mit Werten und null. Jetzt möchte ich für jede Gruppe, wo immer die Klasse null ist, diese Gruppe als T-NULL bzw. C-NULL umbenennen. Wenn die Gruppe (T oder c) einen Wert in 'class' hat, sollte der Gruppenname so sein wie er ist. Wie können wir dafür einen Code in R schreiben?

+1

(1) Was Sie versucht haben? (2) Ist "Gruppe" Faktor oder Charakter? (3) Gruppierung scheint hier keine Rolle zu spielen. (4) Bitte geben Sie ein reproduzierbares Beispiel an. –

Antwort

1

Wir können data.table verwenden. Konvertieren Sie 'data.frame' in 'data.table', basierend auf der logischen Bedingung für NA-Werte in 'class', we paste die Spalte NULL in 'group' und weisen Sie die geänderte Zeichenkette der Gruppe '

' zu ( :=)
library(data.table) 
setDT(a)[is.na(class), group := paste(group, "NULL", sep="-")] 
a 
# group marks upd class 
#1:  T  2 up  A 
#2: C-NULL  3 up NA 
#3:  C  4 down  B 
#4: T-NULL  5 up NA 
#5:  T  6 down  D 
#6: C-NULL  7 up NA 
#7: T-NULL  1 down NA 
#8:  T  0 down  G 

Oder base R

a$group[is.na(a$class)] <- paste(a$group[is.na(a$class)], "NULL", sep="-") 

HINWEIS Verwendung: Wir gehen davon aus, dass die 'Gruppe' Spalte character Klasse ist. Wenn es factor Klasse ist, konvertieren zu character Klasse (as.character kann verwendet werden oder beim Lesen des Datasets stringsAsFactors=FALSE) oder fügen Sie sowohl die 'C-NULL' und 'T-NULL' als levels bis factor und dann die modifizierte Zeichenfolge zuweisen.

+1

Das letzte ist eine sehr gute Lösung für eine beliebige Anzahl von Gruppenwerten. Nett! – Gopala

+0

@Gopala Die 'data.table' Zuweisung wäre schnell wie es vor Ort passiert. – akrun

+1

@Frank Danke für die Bearbeitung – akrun

1

Versuchen Sie, diese

a$group = paste0(a$group, ifelse(is.na(a$class), "-NULL", "")) 
+1

Es scheint wie eine Verschwendung Zeit zu verbringen, um nichts zu kleben, wenn Sie nur die relevanten Werte einfügen können. –

Verwandte Themen