how to get the average of two columns of a data table using dplyr? For example, if my data if like below:
dt <- data.table(A=1:5, B=c(1,4,NA,6,8))
I want to create a new column "Avg" which is the mean of column A and B for each row:
dt %>% mutate(Avg=mean(c(A, B), na.rm=T))
But this code does not give me the correct result. How to do this? Thank you very much.
To find the mean of multiple columns based on multiple grouping columns in R data frame, we can use summarise_at function with mean function.
To calculate the average of a data frame column in R, use the mean() function. The mean() function takes the column name as an argument and calculates the mean value of that column.
Computing Column Means on data without missing data using across() function dplyr. Our dataframe contains both numerical and character variables. To compute means of all numerical columns, we use select() function to select the numerical columns. And then apply across() function on all columns to compute mean values.
How do I concatenate two columns in R? To concatenate two columns you can use the <code>paste()</code> function. For example, if you want to combine the two columns A and B in the dataframe df you can use the following code: <code>df['AB'] <- paste(df$A, df$B)</code>.
If you want to use dplyr to achieve this, I would suggest using the function rowwise()
:
R> library(dplyr)
R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8))
R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T))
R> j
Source: local data frame [5 x 3]
Groups: <by row>
A B Avg
(int) (dbl) (dbl)
1 1 1 1.0
2 2 4 3.0
3 3 NA 3.0
4 4 6 5.0
5 5 8 6.5
How about
dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T))
mean
is not vectorized. It collapse all inputs to a single value. If you make a matrix with cbind()
, you can use rowMeans
to do the trick.
As the initial dataset is data.table
, we could use data.table
methods
dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)]
dt
# A B Avg
#1: 1 1 1.0
#2: 2 4 3.0
#3: 3 NA 3.0
#4: 4 6 5.0
#5: 5 8 6.5
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With