gpt4 book ai didi

r - 使用 do.call 时丢失数据帧

转载 作者:行者123 更新时间:2023-12-03 21:50:08 24 4
gpt4 key购买 nike

我正在尝试使用 rbind 合并许多数据帧。如果我直接调用 rbind 就没有问题:

> test <- rbind(x)
> is.data.frame(x)
[1] TRUE

但是,如果我使用 do.call我遇到了一个问题,我的字符列被折叠并且数据框被转换为矩阵。
>test <- do.call("rbind", x)
> is.data.frame(test)
[1] FALSE

根据我试过的 ?rbind 文档 add stringsAsFactors = FALSE但行为没有改变。我的数据表如下所示:
ID  sequence    descriptor
1 aaacccttt g12
2 actttgtgt e34
3 tttgggctc b12
4 ccgcgcgcg c12
… … ...

并且 rbind 输出看起来像这样,但是 do.call("rbind", x)输出如下所示,其中序列列不再是字符:
ID  363 426 91
Sequence 98 353 100
descriptor g12 b12 c12

我想使用 do.call 因为我正在循环一组数据帧,以便使用下面的脚本来整合它们。另一个有用的答案可能会提供有关如何在循环调用多个数据帧时合并多个数据帧的替代解决方案。
stringsAsFactors = FALSE
dfs <- as.list(ls(pattern="Data_"))
for (i in 1:length(dfs)) {
x <- get(as.character(dfs[i]))
AllData <- do.call("rbind", x)
}
dfs是我工作环境中的数据框列表,我使用 get 获取实际数据框

谢谢你。

最佳答案

有两个不同的问题会给您带来困难。

  • stringsAsFactors

  • 你看是对的 stringsAsFactors ,但只是没有在正确的地方调用它。

    你有两个选择。您可以在 options 中设置它, 像这样:
    options(stringsAsFactors=FALSE)

    或者在用于创建您的 data.table 的代码中年代:
    a <- read.table(textConnection("ID  sequence    descriptor
    1 aaacccttt g12
    2 actttgtgt e34
    3 tttgggctc b12
    4 ccgcgcgcg c12"),
    header=T, stringsAsFactors=FALSE)
  • args= do.call() 的参数

  • 您想要使用 do.call() 也是正确的。为了这。但是,正如@Sacha 指出的那样, dfs需要是 data.frame 的列表s,不是一个 data.frame (它本身就是一个向量列表)。
    # Create list of two data.frames
    b <- a
    dfs <- list(a, b)

    # Or, if you start with a list of their names
    dfs <- list("a", "b")
    dfs <- lapply(dfs, get)

    # Check that this works
    do.call("rbind", dfs)
    # ID sequence descriptor
    # 1 1 aaacccttt g12
    # 2 2 actttgtgt e34
    # 3 3 tttgggctc b12
    # 4 4 ccgcgcgcg c12
    # 5 1 aaacccttt g12
    # 6 2 actttgtgt e34
    # 7 3 tttgggctc b12
    # 8 4 ccgcgcgcg c12

    即使您只有一个 data.frame,这也应该适用于您。 , 只要它被包裹在 (length-1) list ,像这样: dfs <- list(a)

    关于r - 使用 do.call 时丢失数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7973535/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com