我想在一列中加入几列,例如
col1 <- c("Uno", NA, "tres", NA)
col2 <- c(NA, "dos", NA, NA)
col3 <- c(NA,NA,NA, "cuatro")
df <- data.frame(col1,col2, col3)
library(sqldf)
df2<-sqldf("select *, coalesce(col1,col2,col3 ) UNIDOS from df")
col1 col2 col3 UNIDOS
1 Uno <NA> <NA> Uno
2 <NA> dos <NA> dos
3 tres <NA> <NA> tres
4 <NA> <NA> cuatro cuatro
但是,如果不是 3 列,而是 300,正如我在这部分中指出的那样
coalesce(col1,col2,col3......col300 )
不写300?
我试过了
unir<-paste0("col", (seq(1,3)))
sqldf("select *, coalesce(unir) UNIDOS from df")
但停留
使用基本 R
可能如下
在 apply 函数内部发生了一些必须提到的事情,
df2[,unir]
正在过滤要加入的 data.frame 的列。MARGIN=1
告诉 apply 迭代前一个 data.frame 的行,如果它等于 2 它将迭代列。function(x)
是我们要对 data.frame 的每一行执行的操作。您可以随时查看帮助
?apply
以了解更多信息。使用 tidyr
我在使用 tidyr 时看到的一个优点是我们可以使用tidy-select 选择我们想要加入的变量,这是一个非常有用的工具,例如,它允许我们使用 operator 选择一系列连续变量
:
。