R:使用dplyr :: mutate / dplyr :: transmute和一个作用于整行的函数

时间:2016-03-15 01:24:38

标签: r dplyr

我有一个数据框。为了论证,让我们说它是datasets::women数据框。我想通过向每一行应用一个函数来从帧中创建一个向量。

通常,执行此操作的方法是使用dplyr并致电mutatetransmute,例如:

dplyr::transmute(women, some_index = 2 * height + weight)

太棒了:这很有效。 但是,如果我将some_index的计算结果放到一个作用于行的函数中,该怎么办:

calc_some_index <- function(woman) {
    2 * woman$height + woman$weight
}

有没有办法调用mutate / transmute,以便在输入的每一行调用此函数?

当然,如果我打电话

,我可以看到我得到了正确的结果
dplyr::transmute(women, some_index=calc_some_index(women))

但我相信这只是通过将预先计算的计算向量转换为transmute调用来“欺骗”。例如,如果我打电话,它就不起作用了:

dplyr::transmute(head(women, n=10), some_index=calc_some_index(women))

1 个答案:

答案 0 :(得分:2)

我认为您发生尺寸错误。

如果我这样做

library(dplyr)
transmute(head(women, n=10),
          some_index=calc_some_index(head(women,10)))

然后它可以工作(代码中的错误主张大小不同)

或者,您可以使用管道并且它可以工作:

head(women, 10) %>%
   transmute(calc_some_index(.))