【问题标题】:How should one pass columns as variables or indexes to tidyr::separate应该如何将列作为变量或索引传递给 tidyr::separate
【发布时间】:2016-12-02 17:52:13
【问题描述】:

尝试将列名作为索引或变量传递给tidyr::separate 时出错。

设置库和数据:

library(tidyr)
library(dplyr)
x <- data.frame(col1 = 1:4,
                col2 = c("a,b,c","d,e,f","g,h,i","j,k,l"))
sep <- ","
colnameVar <- "col2"

这些工作(在 dplyr 中):

x %>% select(col2) %>% names
# [1] "col2"
x %>% select(colnameVar %>% as.name %>% eval) %>% names
# [1] "col2"
x %>% select(2) %>% names
# [1] "col2"

这样(单独):

x %>%
 separate(col2,
 paste("col2",1:3,sep="."),
 sep = sep) %>% names
# [1] "col1"   "col2.1" "col2.2" "col2.3"

但这失败了:

x %>%
 separate(colnameVar %>% as.name %>% eval,
 paste("col2",1:3,sep="."),
 sep = sep) %>% names

错误:无效的列规范

这样:

x %>%
 separate(2,
 paste("col2",1:3,sep="."),
 sep = sep) %>% names

错误:无效的列规范

这应该怎么做?

【问题讨论】:

    标签: r tidyr


    【解决方案1】:

    使用下划线版本的分隔,我们可以在其中传递字符串:

    # colnames as a predefined string
    x %>%
      separate_(colnameVar, paste("col2", 1:3, sep = "."), sep = sep) %>%
      names
    # [1] "col1"   "col2.1" "col2.2" "col2.3"
    
    # colnames as index (well almost, we are getting colname as string by index)
    x %>%
      separate_(colnames(x)[2], paste("col2", 1:3, sep = "."), sep = sep) %>%
      names
    # [1] "col1"   "col2.1" "col2.2" "col2.3"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 2017-07-16
      • 2021-01-14
      • 2013-03-05
      • 2013-01-27
      • 2015-11-21
      • 2016-10-05
      • 2016-11-18
      相关资源
      最近更新 更多