使用 tidyr 合并 tibble 中的所有列
Unite all columns in tibble with tidyr
我想将一个小标题中的所有列合并为一个供以后处理。每当我尝试这样做时,我都会收到错误消息
Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], : missing value where TRUE/FALSE needed
tidyr:unite documentation 说你可以通过不指定任何列来做到这一点。这是一个玩具示例:
ex <- as_tibble(matrix(rnorm(20), ncol = 4))
ex
unite(ex, 'new')
我只是错过了一些 tidyverse 的微妙之处还是...?
因此,我认为即使要合并所有列,也需要指定列。
为此,您只需使用 1:x,其中 x 是最后一列编号,您无需将它们全部写出。例如,在您的代码中,您将输入:
unite(ex, new, 1:4, sep="")
请记住也将 sep= 参数放入 - sep="" 表示它们将无缝连接在一起,但 sep="."表示中间会有一个点。
希望仍然有用!
编辑:为了更容易使用列号而不是名称,您可以使用 ncol() 查找要指定的列数,例如您的示例中的 ncol(ex) returns 4 。
怎么样
df <- ex %>%
unite(ex,1:ncol(ex),sep=" ")
我想将一个小标题中的所有列合并为一个供以后处理。每当我尝试这样做时,我都会收到错误消息
Error in if (!after) c(values, x) else if (after >= lengx) c(x, values) else c(x[1L:after], : missing value where TRUE/FALSE needed
tidyr:unite documentation 说你可以通过不指定任何列来做到这一点。这是一个玩具示例:
ex <- as_tibble(matrix(rnorm(20), ncol = 4))
ex
unite(ex, 'new')
我只是错过了一些 tidyverse 的微妙之处还是...?
因此,我认为即使要合并所有列,也需要指定列。
为此,您只需使用 1:x,其中 x 是最后一列编号,您无需将它们全部写出。例如,在您的代码中,您将输入:
unite(ex, new, 1:4, sep="")
请记住也将 sep= 参数放入 - sep="" 表示它们将无缝连接在一起,但 sep="."表示中间会有一个点。
希望仍然有用!
编辑:为了更容易使用列号而不是名称,您可以使用 ncol() 查找要指定的列数,例如您的示例中的 ncol(ex) returns 4 。
怎么样
df <- ex %>%
unite(ex,1:ncol(ex),sep=" ")