0 votes
1 view
in R Programming by (5k points)

When working with plyr I often found it useful to use adply for scalar functions that I have to apply to each and every row.

e.g.

data(iris)

library(plyr)

head(

     adply(iris, 1, transform , Max.Len= max(Sepal.Length,Petal.Length))

    )

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len

1          5.1         3.5          1.4         0.2  setosa     5.1

2          4.9         3.0          1.4         0.2  setosa     4.9

3          4.7         3.2          1.3         0.2  setosa     4.7

4          4.6         3.1          1.5         0.2  setosa     4.6

5          5.0         3.6          1.4         0.2  setosa     5.0

6          5.4         3.9          1.7         0.4  setosa     5.4

Now I'm using dplyr more, I'm wondering if there is a tidy/natural way to do this? As this is NOT what I want:

library(dplyr)

head(

     mutate(iris, Max.Len= max(Sepal.Length,Petal.Length))

    )

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len

1          5.1         3.5          1.4         0.2  setosa     7.9

2          4.9         3.0          1.4         0.2  setosa     7.9

3          4.7         3.2          1.3         0.2  setosa     7.9

4          4.6         3.1          1.5         0.2  setosa     7.9

5          5.0         3.6          1.4         0.2  setosa     7.9

6          5.4         3.9          1.7         0.4  setosa     7.9

1 Answer

0 votes
by (24.7k points)

You can use the rowwise() function from the dplyr package that used to support arbitrary complex operations that need to be applied to each row.

i.e.,

iris %>% 

  rowwise() %>% 

  mutate(Max.Len= max(Sepal.Length,Petal.Length))

Source: local data frame [150 x 6]

Groups: <by row>

# A tibble: 150 x 6

   Sepal.Length Sepal.Width Petal.Length Petal.Width Species Max.Len

          <dbl>       <dbl>        <dbl>       <dbl> <fct>     <dbl>

 1          5.1         3.5          1.4         0.2 setosa      5.1

 2          4.9         3            1.4         0.2 setosa      4.9

 3          4.7         3.2          1.3         0.2 setosa      4.7

 4          4.6         3.1          1.5         0.2 setosa      4.6

 5          5           3.6          1.4         0.2 setosa      5  

 6          5.4         3.9          1.7         0.4 setosa      5.4

 7          4.6         3.4          1.4         0.3 setosa      4.6

 8          5           3.4          1.5         0.2 setosa      5  

 9          4.4         2.9          1.4         0.2 setosa      4.4

10          4.9         3.1          1.5         0.1 setosa      4.9

# ... with 140 more rows

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...