簡體   English   中英

用另一個data.frame中的值替換data.frame中的值

[英]Substitute values in a data.frame with values from another data.frame

所以,我有這個data.frame,我們稱之為df1,看起來像這樣

   r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12
1   1  2  2  2  0  2  1  2  0   2   1   2
2   0  2  2  2  2  2  0  2  0   2   2   2
3   1  2  2  2  0  2  2  2  2   1   2   2
4   1  2  2  2  2  1  2  2  2   1   2   2
5   0  1  2  2  0  2  1  0  0   1   1   0
6   0  2  0  2  0  2  2  0  0   2   2   2
7   1  2  2  2  2  2  2  0  0   1   2   2
8   0  2  2  2  2  2  2  2  2   2   2   2
9   0  2  2  2  2  2  1  1  1   1   1   2

讓我們稱之為df2,就像這樣

         r1         r2             r3             r4            r5 ...
1 arp1_base melo1_base      son_clave     melo2_base   melo3_major ...
2   arp1_v1   melo1_v1    rumba_clave melo2_staccato   melo3_minor ...
3   arp1_v2   melo1_v2 rumba_clave_v1  melo2_contour melo3_contour ...

我沒有粘貼所有列,但你明白了(是的,行數不同)。

現在我需要將第一個data.frame的每一列中的數字替換為匹配列的第二個data.frame中的值,並使用第一個data.frame中的數字作為第二個data.frame的行索引。 我想要的是一個新的data.frame,如下所示:

         r1         r2             r3 ...
1   arp1_v1   melo1_v2 rumba_clave_v1 ...
2 arp1_base   melo1_v2 rumba_clave_v1 ...
3   arp1_v1   melo1_v2 rumba_clave_v1 ...
.         .          .              .
.         .          .              .
.         .          .              .

我怎么做? 理想情況下,每個新列都是將三個名稱保留為級別的因子。

順便說一句,我覺得這是一個常見問題解答,但我面臨着通常的n00b問題,不知道谷歌是什么。 那周圍有什么魔法嗎?

編輯根據@ akrun的建議,我可以做df1[] <- Map(function(x, y) factor(y[x+1]), df1, df2)我幾乎得到了我想要的東西,在這個意義上df1的列現在是具有替換值的因子,但是我需要這些因子中的每一個都具有df2相應列的所有值作為級別。

嘗試

  df1[] <- Map(function(x, y) y[x+1], df1, df2)
  df1
  #       r1       r2             r3            r4            r5
  #1   arp1_v1 melo1_v2 rumba_clave_v1 melo2_contour   melo3_major
  #2 arp1_base melo1_v2 rumba_clave_v1 melo2_contour melo3_contour
  #3   arp1_v1 melo1_v2 rumba_clave_v1 melo2_contour   melo3_major
  #4   arp1_v1 melo1_v2 rumba_clave_v1 melo2_contour melo3_contour
  #5 arp1_base melo1_v1 rumba_clave_v1 melo2_contour   melo3_major
  #6 arp1_base melo1_v2      son_clave melo2_contour   melo3_major
  #7   arp1_v1 melo1_v2 rumba_clave_v1 melo2_contour melo3_contour
  #8 arp1_base melo1_v2 rumba_clave_v1 melo2_contour melo3_contour
  #9 arp1_base melo1_v2 rumba_clave_v1 melo2_contour melo3_contour

更新

要將列創建為factor ,其級別等於df2的相應列的levels

  df1[] <-  Map(function(x, y) factor(y[x+1], levels=unique(y)), df1, df2)
  levels(df1[,1])
  #[1] "arp1_base" "arp1_v1"   "arp1_v2"  

數據

 df1 <- structure(list(r1 = c(1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 0L), r2 = c(2L, 
 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L), r3 = c(2L, 2L, 2L, 2L, 2L, 0L, 
 2L, 2L, 2L), r4 = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), r5 = c(0L, 
 2L, 0L, 2L, 0L, 0L, 2L, 2L, 2L)), .Names = c("r1", "r2", "r3", 
 "r4", "r5"), class = "data.frame", row.names = c("1", "2", "3", 
 "4", "5", "6", "7", "8", "9"))

 df2 <- structure(list(r1 = c("arp1_base", "arp1_v1", "arp1_v2"), 
  r2 = c("melo1_base", "melo1_v1", "melo1_v2"), r3 = c("son_clave",
  "rumba_clave", "rumba_clave_v1"), r4 = c("melo2_base", "melo2_staccato",
  "melo2_contour"), r5 = c("melo3_major","melo3_minor", "melo3_contour")),
 .Names = c("r1", "r2", "r3", "r4", "r5"), class = "data.frame", 
 row.names = c("1", "2", "3"))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM