【问题标题】:Dynamically concatenate Columns in RR中的动态连接列
【发布时间】:2018-06-02 04:09:38
【问题描述】:

我在动态连接列时遇到问题。我正在构建一个区域计算器,它对度量进行求和,但希望它足够灵活以适应各种输入。

使用 mtcars 和一个例子:

                ColA <- "mpg"
                ColB <- "cyl"
                ColC <- "disp"

mtcars$lookup <-paste0(mtcars[[ColA]],mtcars[[ColB]],mtcars[[ColC]])

(我知道上面的例子连接了没有意义的数字!-在我的版本中使用了包含字符串的列)

这将为我提供所需的查找列。但是我想做的是动态填充我的查找列。有时会有 2 列,有时可能是 5 列,并且列名称会从一个项目更改为下一个项目。

我想我可以使用 List 和 For 循环填充 ColA > ColX 中的字符串。但我不确定如何使用 paste0.... 动态解决查找创建问题。

mtcars$lookup <-paste0(mtcars[[ColA]],......mtcars[[ColX]])

任何想法如何解决这个问题? 谢谢!

【问题讨论】:

    标签: r list dynamic lookup dynamic-columns


    【解决方案1】:

    您可以使用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 = "")
    

    【讨论】:

    • 工作得很好!谢谢!
    • Re - Unite 解决方案.... 使用remove = FALSE 作为参数正是我所需要的。谢谢!
    猜你喜欢
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2018-02-20
    • 2019-03-31
    相关资源
    最近更新 更多