动态连接 R 中的列
Dynamically concatenate Columns in R
我在动态连接列时遇到问题。我正在构建一个区域计算器,它对度量求和,但希望它足够灵活以适应各种输入。
使用 mtcars 和示例:
ColA <- "mpg"
ColB <- "cyl"
ColC <- "disp"
mtcars$lookup <-paste0(mtcars[[ColA]],mtcars[[ColB]],mtcars[[ColC]])
(我知道上面的例子连接了没有意义的数字!-在我的版本中使用了包含字符串的列)
这将为我提供所需的查找列。但是我想做的是动态填充我的查找列。有时会有 2 列,有时可能是 5 列,并且列名会随着项目的不同而变化。
我想我可以使用列表和 For 循环填充 ColA > ColX 中的字符串。但我不确定如何使用 paste0 动态解决查找创建....
mtcars$lookup <-paste0(mtcars[[ColA]],......mtcars[[ColX]])
有什么办法解决这个问题吗?
谢谢!
您可以使用 do.call(paste0, ...)
成语:
mtcars$lookup <- do.call(paste0, mtcars[c(ColA, ColB, ColC)])
mtcars$lookup
## [1] "216160" "216160" "22.84108" "21.46258" "18.78360" "18.16225" "14.38360"
## [8] "24.44146.7" "22.84140.8" "19.26167.6" "17.86167.6" "16.48275.8" "17.38275.8" "15.28275.8"
## [15] "10.48472" "10.48460" "14.78440" "32.4478.7" "30.4475.7" "33.9471.1" "21.54120.1"
## [22] "15.58318" "15.28304" "13.38350" "19.28400" "27.3479" "264120.3" "30.4495.1"
## [29] "15.88351" "19.76145" "158301" "21.44121"
将 c(ColA, ColB, ColC)
替换为列名甚至列位置的向量。
在"tidyverse"中也可以使用unite
。尝试以下操作以查看它的作用:
library(tidyverse) ## `unite` comes from the tidyr package, FYI
mtcars %>% unite(output, mpg, cyl, disp, sep = "")
我在动态连接列时遇到问题。我正在构建一个区域计算器,它对度量求和,但希望它足够灵活以适应各种输入。
使用 mtcars 和示例:
ColA <- "mpg"
ColB <- "cyl"
ColC <- "disp"
mtcars$lookup <-paste0(mtcars[[ColA]],mtcars[[ColB]],mtcars[[ColC]])
(我知道上面的例子连接了没有意义的数字!-在我的版本中使用了包含字符串的列)
这将为我提供所需的查找列。但是我想做的是动态填充我的查找列。有时会有 2 列,有时可能是 5 列,并且列名会随着项目的不同而变化。
我想我可以使用列表和 For 循环填充 ColA > ColX 中的字符串。但我不确定如何使用 paste0 动态解决查找创建....
mtcars$lookup <-paste0(mtcars[[ColA]],......mtcars[[ColX]])
有什么办法解决这个问题吗? 谢谢!
您可以使用 do.call(paste0, ...)
成语:
mtcars$lookup <- do.call(paste0, mtcars[c(ColA, ColB, ColC)])
mtcars$lookup
## [1] "216160" "216160" "22.84108" "21.46258" "18.78360" "18.16225" "14.38360"
## [8] "24.44146.7" "22.84140.8" "19.26167.6" "17.86167.6" "16.48275.8" "17.38275.8" "15.28275.8"
## [15] "10.48472" "10.48460" "14.78440" "32.4478.7" "30.4475.7" "33.9471.1" "21.54120.1"
## [22] "15.58318" "15.28304" "13.38350" "19.28400" "27.3479" "264120.3" "30.4495.1"
## [29] "15.88351" "19.76145" "158301" "21.44121"
将 c(ColA, ColB, ColC)
替换为列名甚至列位置的向量。
在"tidyverse"中也可以使用unite
。尝试以下操作以查看它的作用:
library(tidyverse) ## `unite` comes from the tidyr package, FYI
mtcars %>% unite(output, mpg, cyl, disp, sep = "")