user330
user330

Reputation: 1270

How to loop between columns to calculate the variables

Below, assume this is part of the data:

df <- tribble(
    ~temp1, ~temp2, ~temp3, ~temp4, ~temp5, ~temp6, ~temp7, ~temp8,
    75, 88, 85, 71, 98, 76, 71, 57,
    80, 51, 84, 72, 59, 81, 70, 64,
    54, 65, 90, 66, 93, 88, 77, 59,
    59, 87, 94, 75, 74, 53, 56, 87,
    52, 55, 64, 77, 50, 64, 83, 87,
)

Now I want to make a loop to get the results. In this example, temp1 should go with temp2 ONLY and temp3 should go with temp4 only, temp5 with temp6 only and temp7 with temp8.

Suppose I want to run a correlation or a t-test between the intended variables ( temp1 with 2, temp3 with temp4, temp5with tem6, temp7 with temp8 ONLY)

I would also like to get only statistics, for example only the value of r in correlation... A table would be very helpful.

I have searched it seems we need to use the function of the map, but I struggled to do it. Could we do it in R?

Upvotes: 0

Views: 71

Answers (2)

akrun
akrun

Reputation: 887148

We can use seq to subset the columns and use map2 so that we get the correlation between temp1 and temp2, temp3 and temp4 etc

library(purrr)
out <- map2_dbl(df[seq(1, ncol(df), 2)], df[seq(2, ncol(df), 2)], ~ cor(.x, .y))
names(out) <- paste0("Time", seq_along(out))

Or with Map from base R

out <- unlist(Map(function(x, y) cor(x, y), df[seq(1, ncol(df), 2)], 
           df[seq(2, ncol(df), 2)]))
names(out) <- paste0("Time", seq_along(out))

Upvotes: 1

Edo
Edo

Reputation: 7818

You could split your dataframe in two: one with columns 1,3,5,7 and the other with 2,4,6,8. Then you one take one column per each a time and perform cor or t.test with pmap.

library(purrr)
df %>% 
 split.default(rep_len(1:2, ncol(.))) %>% 
 pmap_dbl(~cor(.x,.y))

Upvotes: 1

Related Questions