2016-07-02 5 views
0

の列を入力します。私は、列Cの値を置換するすべての行においてR-このデータフレームに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 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 

を:列Bの値と列Aの値と一致するG。すべての置換の後、別の置換があるまで列の値を埋めたいと思う。 複雑に聞こえるかもしれませんが、最終的にはこのように見えます。

  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 

データ

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

明らかではありません。なぜあなたは、 "C"列を "M" – akrun

答えて

0

あなたはforループでこれを行うことができます。

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 

これは、いくつかのことを前提としています

  • df列のすべての文字です(因子ではない)
  • 各行の初期値は、最初の行と同じです。
+0

で満たしているのですか、ありがとう! –

関連する問題