2012-04-14 10 views
0

Diese Frage hat wahrscheinlich eine einfache Antwort, also entschuldige ich mich im Voraus. Ich würde gerne R verwenden, um die Werte in v2, df1 neu zu codieren und sie wie die Datenwerte in v2, df2 aussehen zu lassen. Ist es möglich, dies mit einer partiellen Übereinstimmung der Werte in v2, df1 zu tun, die, sagen wir 'Y' enthalten und diese Werte in 'Yr' wie in v2, df2?Recode Variable basierend auf teilweise Übereinstimmung in R

> df1 
    v1 v2 
1 1 Yr01 
2 2 Yr02 
3 3 Yr03 
4 4 Yr04 
5 5 Yr05 

> df2 
    v1 v2 
1 1 Yr 
2 2 Yr 
3 3 Yr 
4 4 Yr 
5 5 Yr 
> 

Antwort

3

können Sie grepl() verwenden einen Vektor von booleans zu erzeugen, je nachdem, was Sie als Ihre regex definieren. Sehen Sie hier für weitere Details zu einem einfachen Intro zu regex: http://www.regular-expressions.info/tutorial.html

df1 <- read.table(text = " 
    v1 v2 
    1 1 Yr01 
    2 2 Yr02 
    3 3 Yr03 
    4 4 Yr04 
    5 5 Yr05", 
    header = TRUE, stringsAsFactors = FALSE) 

df1[grepl("Y", df1$v2), "v2"] <- "Yr" 
> df1 

    v1 v2 
1 1 Yr 
2 2 Yr 
3 3 Yr 
4 4 Yr 
5 5 Yr 

Wenn Ihre Daten ein Faktor ist, müssen Sie zunächst auf Zeichen umwandeln kann, dann verwenden Sie den Code oben.

+0

Danke für die Hilfe und die Bearbeitung. – Mike

0

ich denke, das für Sie funktionieren würde, aber es kann je nach einen besseren Weg geben, wie viele Gruppen, die Sie haben und die Größe des Datenrahmens:

df1$v2 <- ifelse(grepl("Y", df1$v2), "Yr", df1$v2) 
+0

Meine Methode erfordert nicht, dass Sie zuerst in Zeichen konvertieren, aber Chases (das Indizierung verwendet) ist wahrscheinlich schneller. –

+0

Danke für die Hilfe. – Mike

0

Eine weitere Verwendung von Regex.

df1$v2 <- gsub("Y.*","Yr", df1$v2) 
Verwandte Themen