【问题标题】:Creating a data.frame with piping in R - and naming columns在 R 中创建带有管道的 data.frame - 并命名列
【发布时间】:2019-08-01 09:04:44
【问题描述】:

我知道我可以通过其他方式做到这一点,但我只是好奇。

dfDice = sample(1:6, 10000, replace = TRUE) %>%
            data.frame()

上面创建了一个data.frame,其中列标题称为'.'。

所以我的第一个问题是我可以将列标题通过管道传输到我的代码中吗?我已经尝试将它放在我的 data.frame() 函数中,但它只是创建了一个新列。

我的第二个问题是,我可以将多个列通过管道传输到 data.frame 中,还是我必须做这样的事情?:

dfDice = (num = sample(1:6, 10000, replace = TRUE) %>% 
              data.frame(letters = sample(LETTERS, 10000, replace = TRUE))

再次,我知道这不是创建 data.frame 的最佳方式,我只是从学习的角度很好奇并试图完全理解管道。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    所以我的第一个问题是我可以将列标题通过管道传输到我的代码中吗?一世 已尝试将其放入我的 data.frame() 函数中,但它只是创建 一个新的列。

    对于单列,您有两种选择:

    dfDice <- sample(1:6, 10000, replace = TRUE) %>%
      data.frame() %>%
      setNnames("num")
    
    dfDice <- sample(1:6, 10000, replace = TRUE) %>%
      data.frame(num = .)
    

    我的第二个问题是,我可以将多个列通过管道传输到一个 数据帧?

    sample(1:6, 5, replace = TRUE) %>% 
      cbind(sample(LETTERS, 5, replace = TRUE)) %>% 
      as.data.frame() %>% 
      setNames(c("num", "letters"))
    

    【讨论】:

    • 完美,您的回复非常有帮助且清晰。我可以继续使用 cbind 添加其他列。伟大的!谢谢
    • 我无法让 'set_colnames' 工作,但 'setNames' 成功了。再次感谢您
    • 我一直认为 set_colnames 来自 base,它实际上来自 magrittr 但放在命名空间 base 中
    【解决方案2】:

    要分配名称,您可以使用预定义的向量并使用setNames

    library(dplyr)
    
    cols <- "a"
    
    sample(1:6, 10, replace = TRUE) %>%
       data.frame()  %>%
       setNames(cols)
    

    或者也可以在事先不知道列数的情况下动态命名。

    sample(1:6, 10, replace = TRUE) %>%
      data.frame()  %>%
      setNames(letters[seq_along(.)])
    

    对于第二个问题,最简单的选择是

    data.frame(a = sample(1:6, 10, replace = TRUE), 
               b = sample(LETTERS, 10, replace = TRUE))
    

    或者如果你想使用管道?

    sample(1:6, 10, replace = TRUE) %>% 
      data.frame() %>%
      setNames(cols) %>%
      bind_cols(b = sample(LETTERS, 10, replace = TRUE))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      相关资源
      最近更新 更多