Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

sapply results with dplyr

Tags:

r

dplyr

In the example below I am trying to determine which value is closest to each of the vals_int, by id. I can solve this problem using sapply() in a matter similar to below, but I am wondering if the sapply() part can be done with another function in dplyr.

I am really just interested in if the sapply method and output can be reproduced using some function(s) in the dplyr package. I had thought that do() may work but am struggling to determine how.

library(tidyverse)

df <- data_frame(
  id = rep(1:10, 10) %>% 
    sort,
  visit = rep(1:10, 10),
  value = rnorm(100)
)

vals_int <- c(1, 2, 3)

tmp <- sapply(vals_int,
              function(val_i) abs(df$value - val_i))
like image 735
Steve Reno Avatar asked Dec 08 '25 17:12

Steve Reno


1 Answers

Yes, you can use the rowwise() and do() functions in dplyr to perform the same operation on every row, like so:

df %>% rowwise %>% do(diffs = abs(.$value - vals_int))

This will create a column called diffs in a new tibble which is a list of vectors with length 3. If you coerce the output that do() returns to be a data frame, it will instead create a tibble with three columns, one for each of the values subtracted.

df %>% rowwise %>% do(as.data.frame(t(abs(.$value - vals_int))))
like image 128
qdread Avatar answered Dec 11 '25 10:12

qdread



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!