【发布时间】:2017-03-27 07:16:05
【问题描述】:
这类似于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”数据帧的 S4、S5、S6 列替换为“rand.val1”数据帧的 S4、S5、S6 列,基于'二项式'。 'score.rand2' by 'rand.val2' ... 'score.rand3' by 'rand.val3' 数据帧...等等对于所有 1000 个数据帧。
【问题讨论】:
-
您正在寻找
merge函数,类似于merge(score.rand1, rand.val1, by = "Binomial")。 -
谢谢。但是我怎样才能为 1000 个数据帧做到这一点。我曾尝试使用 for 循环但失败了:(
-
这就是为什么 R 有对象
list来存储你的 data.frames 然后使用apply系列函数处理整个集合。如果您的工作区中有“乱扔”的 data.frames,则必须手动抓取它(使用ls()),然后使用get()检索它们。 -
在列表上工作真的很容易。为什么要将您的 dfs “取消列出”到 .Global?