2016-07-02 50 views
0

In diesem Datenrahmen:R- Spalten in df Füllen

  a  b c d e f g 
1   <NA>  <NA> H W Ja C S 
2   <NA>  <NA> H W Ja C S 
3   S  Sm H W Ja C S 
4   Ja  K H W Ja C S 
5   <NA>  <NA> H W Ja C S 
6   <NA>  <NA> H W Ja C S 
7   <NA>  <NA> H W Ja C S 
8   H  M H W Ja C S 
9   C  Ja H W Ja C S 
10  <NA>  <NA> H W Ja C S 
11  <NA>  <NA> H W Ja C S 
12  <NA>  <NA> H W Ja C S 
13  <NA>  <NA> H W Ja C S 
14   W  H H W Ja C S 
15   K  J H W Ja C S 
16  <NA>  <NA> H W Ja C S 
17  <NA>  <NA> H W Ja C S 
18  <NA>  <NA> H W Ja C S 

In jeder Zeile Ich mag ersetzen Werte in den Spalten c: g, die mit den Werten in Spalte b-Werte in Spalte A entspricht. Nach jeder Substitution möchte ich die Werte in der Spalte auffüllen, bis eine weitere Substitution erfolgt. Es klingt vielleicht kompliziert, aber am Ende sollte es so aussehen.

  a   b c d e f g 
1   <NA>  <NA> H W Ja C S 
2   <NA>  <NA> H W Ja C S 
3   S   Sm H W Ja C Sm 
4   Ja   K H W K C Sm 
5   <NA>  <NA> H W K C Sm 
6   <NA>  <NA> H W K C Sm 
7   <NA>  <NA> H W K C Sm 
8   H   M M W K C Sm 
9   C   Ja M W K Ja Sm 
10  <NA>  <NA> M W K Ja Sm 
11  <NA>  <NA> M W K Ja Sm 
12  <NA>  <NA> M W K Ja Sm 
13  <NA>  <NA> M W K Ja Sm 
14   W   H M H K Ja Sm 
15   K   J M H J Ja Sm 
16  <NA>  <NA> M H J Ja Sm 
17  <NA>  <NA> M H J Ja Sm 
18  <NA>  <NA> M H J Ja Sm 

Daten

structure(list(a = c(NA, NA, "S", "Ja", NA, NA, NA, "H", "C", NA, NA, NA, NA, "W", "K", NA, NA, NA), 
       b = c(NA, NA, "Sm", "K", NA, NA, NA, "M", "Ja", NA, NA, NA, NA, "H", "J", NA, NA, NA), 
       c = c("H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H"), 
       d = c("W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W", "W"), 
       e = c("Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja", "Ja"), 
       f = c("C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C"), 
       g = c("S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S")), 
      .Names = c("a", "b", "c", "d", "e", "f", "g"), class = "data.frame", 
      row.names = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18")) 
+1

Es ist nicht so klar. Warum füllst du die 'c' Spalte mit "M" – akrun

Antwort

0

Sie können dies tun mit einer for Schleife:

x <- df[1,c('c','d','e','f','g')] 
for (i in seq(nrow(df))) { 
    x[x==df[i,'a']] <- df[i,'b'] 
    df[i,c('c','d','e','f','g')] <- x 
} 
df 
##  a b c d e f g 
## 1 <NA> <NA> H W Ja C S 
## 2 <NA> <NA> H W Ja C S 
## 3  S Sm H W Ja C Sm 
## 4 Ja K H W K C Sm 
## 5 <NA> <NA> H W K C Sm 
## 6 <NA> <NA> H W K C Sm 
## 7 <NA> <NA> H W K C Sm 
## 8  H M M W K C Sm 
## 9  C Ja M W K Ja Sm 
## 10 <NA> <NA> M W K Ja Sm 
## 11 <NA> <NA> M W K Ja Sm 
## 12 <NA> <NA> M W K Ja Sm 
## 13 <NA> <NA> M W K Ja Sm 
## 14 W H M H K Ja Sm 
## 15 K J M H J Ja Sm 
## 16 <NA> <NA> M H J Ja Sm 
## 17 <NA> <NA> M H J Ja Sm 
## 18 <NA> <NA> M H J Ja Sm 

Dies ein paar Dinge übernimmt:

  • Alle der df Spalten sind Zeichen (kein Faktor)
  • Der Anfangswert jeder Zeile ist derselbe wie in der ersten Zeile.
+0

das funktioniert, danke! –