我有一个案例,希望优化代码更直接,并将lapply
结果的多个元素指定为tibble
中的列。
我知道data.table
中的这个怎么做,我想要的程序是这样的:
data <- data.table(x=1:9)
data[, c("y","z") := lapply(2:3, function(p){ x^p })]
# x y z
#1: 1 1 1
#2: 2 4 8
#3: 3 9 27
#4: 4 16 64
#5: 5 25 125
现在,我想对dplyr
做同样的事情。我已经尝试了一些替代方案:
data <- tibble(x=1:9)
data <- data %>%
mutate(c("y","z")=lapply(2:3, function(p){ x^p }))
但它出错了。
答案 0 :(得分:2)
我们可以使用tidyverse
选项
library(tidyverse)
map2(2:3, c("y", "z"), ~set_names(data_frame(data$x^.x), .y)) %>%
bind_cols(data, .)
# x y z
#1: 1 1 1
#2: 2 4 8
#3: 3 9 27
#4: 4 16 64
#5: 5 25 125
#6: 6 36 216
#7: 7 49 343
#8: 8 64 512
#9: 9 81 729
或者我们可以删除data_frame
来电
data %>%
map2(2:3, ~ .^.y) %>%
set_names(., c("y", "z")) %>%
bind_cols(data, .)