我想在管道处理中使用dplyr :: mutate比plyr :: ddply函数

时间:2019-01-09 18:23:47

标签: r dplyr plyr tibble

我想通过mutate函数而不是ddplyr one做同样的事情。是否可以通过某种方式在此处执行非矢量化操作?

test <- tibble::tibble(
  x = c(1,2,3),
  y = c(0.5,1,1.5)
)
d <- c(1.23, 0.99, 2.18)

test %>% mutate(., s = (function(x, y) {
  dn <- dnorm(x = d, mean = x, sd = y)
  s <- sum(dn)
  s
})(x,y))

test %>% plyr::ddply(., c("x","y"), .fun = function(row) {
  dn <- dnorm(x = d, mean = row$x, sd = row$y)
  s <- sum(dn)
  s
})

1 个答案:

答案 0 :(得分:0)

一种流行的方法是使用dplyr函数:rowwise()

library(tidyverse)

test <- tibble::tibble(
  x = c(1,2,3),
  y = c(0.5,1,1.5)
)
d <- c(1.23, 0.99, 2.18)

test %>% 
  rowwise() %>%                                # prior to mutate specify calculate rowwise
  mutate(., s = (function(x, y) {
    dn <- dnorm(x = d, mean = x, sd = y)
    s <- sum(dn)
    s})(x,y))

这将产生以下结果:

# A tibble: 3 x 3
      x     y     s
  <dbl> <dbl> <dbl>
1     1   0.5 1.56 
2     2   1   0.929
3     3   1.5 0.470