创建一个新列作为其他列的向量

时间:2019-02-04 09:57:17

标签: r dplyr apply lapply mutate

我有一个包含两列(V1和V2)的数据框,我想创建另一列是向量-通过合并功能:c()-将其他列作为参数。

我正在使用dplyr来完成所有任务,因此我想在这种情况下也使用它。

我试图用apply函数创建新列,但是它返回的是所有行的向量(不是行),这让我感到惊讶,因为在其他函数中它是按行工作的。

我已经逐行使用函数解决了它,但是由于它通常效率不高,所以我想看看是否还有其他选择。

这是数据框的定义:

IDs <- structure(list(V1 = c("1", "1", "6"),
                      V2 = c("6", "8", "8")),
                 class = "data.frame",
                 row.names = c(NA, -3L)
                 )

这里是列的创建(一起是错误的结果,一起是好结果):

IDs <-
  IDs %>% 
  mutate(together1 = list(mapply(function (x,y) c(x,y), V1, V2))
        ) %>%
  rowwise() %>% 
  mutate(together2 = list(mapply(function (x,y) c(x,y), V1, V2))
        ) %>% 
  ungroup()

以下是打印结果:

print(as.data.frame(IDs))

V1 V2        together1 together2
1  1  6 1, 6, 1, 8, 6, 8      1, 6
2  1  8 1, 6, 1, 8, 6, 8      1, 8
3  6  8 1, 6, 1, 8, 6, 8      6, 8

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用purrr的{​​{1}}函数来做到这一点:

map2

答案 1 :(得分:2)

您刚刚在SIMPLIFY = FALSE通话中错过了mapply()

dplyr::mutate(IDs, togeher = mapply(c, V1, V2, SIMPLIFY = F))

  V1 V2 togeher
1  1  6    1, 6
2  1  8    1, 8
3  6  8    6, 8

答案 2 :(得分:2)

pmap可以在这里使用

library(tidyverse)
IDs %>% 
   mutate(together = pmap(unname(.), c)) 
#  V1 V2 together
#1  1  6     1, 6
#2  1  8     1, 8
#3  6  8     6, 8