使用循环基于另一个数据框更新数据帧中的列

时间:2017-03-27 07:16:06

标签: r for-loop dataframe

这与此question类似。但我需要为1000个数据帧执行此操作。

我使用以下代码创建了1000个数据框:

df <- replicate(1000, sensitivity.score, simplify = FALSE)
names(df) <- paste("score.rand", 1:length(df), sep = "")
list2env(df, envir = .GlobalEnv)

第一个数据框如下所示:

head(score.rand1)
                     Binomial S1 S2 S3 S4 S5 S6   S7   S8   S9
1    Astacoides betsileoensis  H  L  L  L  H  L <NA>    L    L
2        Astacoides caldwelli  H  L  L  L  H  L <NA>    H <NA>
3        Astacoides crosnieri  L  L  L  L  H  L <NA> <NA>    L
4     Astacoides granulimanus  L  L  L  L  H  L    H <NA>    L
5           Astacoides hobbsi  H  L  H  L  H  L <NA> <NA>    L
6 Astacoides madagascariensis  H  L  L  L  H  L <NA> <NA>    L

我使用以下代码创建了另外1000个数据框:

mydf <- data.frame(Binomial, S4, S5, S6)
lst <- replicate(1000, mydf[sample(nrow(mydf)),] , simplify = FALSE)
names(lst) <- paste("rand.val", 1:length(lst), sep = "")
list2env(lst , envir = .GlobalEnv)

看起来像这样:

head(rand.val1)
                  Binomial       S4       S5   S6
229  Euastacus girurmulayn 46.63442 3.399884 39.0
168 Distocambarus crockeri 15.76044 6.322875 34.7
235      Euastacus jagabar 46.63442 3.399884 40.6
163        Cherax robustus 44.04395 3.108239 42.5
506  Procambarus ortmannii 88.58447 4.422301 24.0
392    Pacifastacus fortis 30.40509 5.860764 42.0

我需要更换 score.rand1 &#39; score.rand1 的列S4,S5,S6。数据框由S4,S5,S6列的 rand.val1 &#39;数据框基于&#39; 二项式&#39;。对于&#39; 得分,然后是&#39;通过&#39; rand.val2 &#39; ...&#39; 得分.3和#39;通过&#39; rand.val3 &#39;所有1000个数据帧的数据帧......等等。

1 个答案:

答案 0 :(得分:1)

将您的数据集放在两个单独的列表中然后您可以使用mapply的合并函数来浏览您的两个数据帧列表,从第一个列表中删除冗余列,然后将两者合并在一起,这看起来像这样:

combined = mapply(function(rand,score){
    rand$S4 = NULL
    rand$S5 = NULL
    rand$S6 = NULL
    output = merge(x = rand, y = score, by = "Binomial")
}, scores,rand)