使用 tidyr 的 `unite_` 与 `unite` 的额外列

Extra column using tidyr's `unite_` vs `unite`

在下面的示例中,为什么 unite_() 输出与 unite() 输出相比多了一个列?

library(tidyr)

x1 <- data.frame(Sample=c("A", "B"), "1"=c("-", "y"), 
                 "2"=c("-", "z"), "3"=c("x", "a"), check.names=F)
#   Sample 1 2 3
# 1      A - - x
# 2      B y z a

这里我们看到了想要的输出:

unite(x1, mix, 2:ncol(x1), sep=",")
#   Sample   mix
# 1      A -,-,x
# 2      B y,z,a

为什么这里要多一列(1 列)?默认是删除 unite_().

使用的列
unite_(x1, "mix", 2:ncol(x1), sep=",")
#   Sample 1   mix
# 1      A - -,-,x
# 2      B y y,z,a

注:tidyr版本0.5.1

两种用法之间的语法略有不同:

#unite(data, col, ..., sep = "_", remove = TRUE)
#unite_(data, col, from, sep = "_", remove = TRUE)

在 unite_ 帮助页面中,from 选项定义为:"Names of existing columns as character vector."

使用列名而不是列号来提供所需的结果:

unite_(x1, "mix", names(x1[,2:ncol(x1)]), sep=",")
#  Sample   mix
#1      A -,-,x
#2      B y,z,a

我试过 "Unite" 但没用。但是,它与 "paste" 函数配合使用效果很好。

df$new_col <- 粘贴(df$col1,df$col2,sep="-") 或者如果您有更多列要加入,

df$new_col <- 粘贴(df$col1,df$col2,df$col3,....,sep="-")