【问题标题】:Unite all columns in tibble with tidyr用 tidyr 联合 tibble 中的所有列
【发布时间】:2018-02-04 13:16:00
【问题描述】:

我想将 tibble 中的所有列合并为一个以供以后处理。每当我尝试这样做时,我都会收到错误

if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], 中的错误:需要 TRUE/FALSE 的地方缺少值

tidyr:unite documentation 表示您可以通过不指定任何列来执行此操作。这是一个玩具示例:

ex <- as_tibble(matrix(rnorm(20), ncol = 4))
ex
unite(ex, 'new')

我只是错过了一些 tidyverse 的微妙之处还是......?

【问题讨论】:

  • 您可以使用dplyr::everything() 来引用列,例如as_tibble(matrix(rnorm(20), ncol = 4)) %&gt;% unite(new, everything()),尽管这一切看起来都是个可怕的主意。
  • ...虽然文档似乎已经过时了。它可能是 rlang 切换的产物,但无论如何都值得 GitHub 问题,如果不存在的话。

标签: r dataframe tidyverse


【解决方案1】:

怎么样

df <- ex %>%
unite(ex,1:ncol(ex),sep=" ") 

【讨论】:

    【解决方案2】:

    所以,我认为即使您想合并所有列,也需要指定列。

    为此,您只需使用 1:x,其中 x 是最后一列编号,您无需将它们全部写出来。例如,在您的代码中,您可以输入:

    unite(ex, new, 1:4, sep="")
    

    请记住将 sep= 参数也放入其中 - sep="" 表示它们将无间隙地连接在一起,但 sep="."表示中间会有一个点。

    希望它仍然有用!

    编辑:为了更容易使用列号而不是名称,您可以使用 ncol() 来查找要指定的列数,例如 ncol(ex) 在您的示例中返回 4。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      • 2022-01-05
      • 1970-01-01
      相关资源
      最近更新 更多