使用R-和命名列中的管道创建data.frame

时间:2019-08-01 09:04:44

标签: r dplyr

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

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的最佳方法,我只是从学习的角度并试图完全理解管道技术而感到好奇。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:2)

  

所以我的第一个问题是我可以将列标题发送到我的代码中吗?一世   已经尝试将其放在我的data.frame()函数中,但它只是创建   一个新列。

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

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

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

第二个问题是,我可以将多列输入一个   data.frame?

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