3

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 }))

しかし、それはうまくいきません。

4

1 に答える 1

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, .)
于 2017-08-30T19:25:29.130 に答える