2017-08-29 40 views
1

我有載體,L1的列表,和數據幀,DF2,以取代在數據幀的值。我想從df2中取值,並用這些取代L1的值。例如,當L1的ABCC10說 「TCGA_DD_A1EG」,我想用值2.193205替換此,從第1行(ABCC10),第3列(TCGA.DD.A1EG)。我想用每個價值來做到這一點。試圖用其它值

L1是這樣的:

$ABCC10 
[1] "TCGA_DD_A1EG" "TCGA_FV_A3R2" "TCGA_FV_A3I0" "TCGA_DD_A1EH" "TCGA_FV_A23B" 

$ACBD6 
[1] "TCGA_DD_A1EH" "TCGA_DD_A3A8" "TCGA_ES_A2HT" "TCGA_DD_A1EG" "TCGA_DD_A1EB" 

DF2看起來是這樣的:

 TCGA.BC.A10Q TCGA.DD.A1EB TCGA.DD.A1EG TCGA.DD.A1EH TCGA.DD.A1EI TCGA.DD.A3A6 TCGA.DD.A3A8 
ABCC10  2.540764 0.4372165  2.193205  3.265756 0.6060301  2.927072 0.6799514 
ACBD6  1.112432 0.4611697  1.274129  1.802985 -0.0475743  1.071064 0.4336301 
     TCGA.ES.A2HT TCGA.FV.A23B TCGA.FV.A3I0 TCGA.FV.A3R2 
ABCC10 -0.08129554 2.2963764  3.196518 0.8595943 
ACBD6 1.76935812 0.3644397  1.392206 1.0282030 
+0

介意副本提供的數據集和粘貼'dput(DF1)'和'duput(DF2)'的輸出? – useR

+0

你的'df1'看起來像一個'list'。你確定這是一個df嗎? –

+0

@RuiBarradas它是由列表 – merryberry

回答

0

也許下面將做到這一點。 首先,彌補了一些數據,一個listdata.frame

df1 <- list(A = letters[1:3], B = letters[5:7]) 

df2 <- data.frame(a = rnorm(2), b = rnorm(2), c = rnorm(2), 
        e = rnorm(2), f = rnorm(2), g = rnorm(2)) 
row.names(df2) <- c('A', 'B') 

現在的代碼。

for(i in seq_along(df1)){ 
    x <- gsub("_", ".", df1[[i]]) 
    inx <- match(x, names(df2)) 
    df1[[i]] <- df2[i, inx] 
} 
df1 

在我的測試中,它做了你想要的。如果它不適合你真正的問題,就這麼說吧。

+0

當我試圖與數據 「在'[.data.frame'(bla2,I,INX)錯誤:選定的未定義的列」 導致@RuiBarradas – merryberry

+0

@merryberry這是因爲在' df1'你有下劃線,'df2'上有點。他們不匹配。我可以添加代碼來照顧這一點。或者,也許你應該這樣做。 –

+0

@merryberry我剛剛用我在前面的評論中所說的話編輯了我的代碼。 –

1

一種方法也能像

df1 = list(ABCC10 = c("TCGA_DD_A1EG", "TCGA_FV_A3R2", "TCGA_FV_A3I0", "TCGA_DD_A1EH", "TCGA_FV_A23B"), 
      ACBD6 = c("TCGA_DD_A1EH", "TCGA_DD_A3A8", "TCGA_ES_A2HT", "TCGA_DD_A1EG", "TCGA_DD_A1EB")) 

df2 = data.frame(TCGA.BC.A10Q = c(2.540764, 1.112432), 
       TCGA.DD.A1EB = c(0.4372165, 0.4611697), 
       TCGA.DD.A1EG = c(2.193205, 1.274129), 
       TCGA.DD.A1EH = c(3.265756, 1.802985), 
       TCGA.DD.A1EI = c(0.6060301, -0.0475743), 
       TCGA.DD.A3A6 = c(2.927072, 1.071064), 
       TCGA.DD.A3A8 = c(0.6799514, 0.4336301), 
       TCGA.ES.A2HT = c(-0.08129554, 1.76935812), 
       TCGA.FV.A23B = c(2.2963764, 0.3644397), 
       TCGA.FV.A3I0 = c(3.196518, 1.392206), 
       TCGA.FV.A3R2 = c(0.8595943, 1.0282030), 
       row.names = c('ABCC10', 'ACBD6')) 

for(i in 1:length(df1)){ 
    for(j in 1:length(df1[[1]])){ 
    df1[names(df1)[i]][[1]][j] = df2[names(df1)[i],gsub("_",".",df1[names(df1)[i]][[1]][j])] 
    } 
} 

輸出是:

$ABCC10 
[1] "2.193205" "0.8595943" "3.196518" "3.265756" "2.2963764" 

$ACBD6 
[1] "1.802985" "0.4336301" "1.76935812" "1.274129" "0.4611697" 

希望這有助於!

+0

@merryberry在正確回答標記正在被撤消時是否正面臨解決方案的問題? – Prem