简体   繁体   中英

Compare column values against another column

I have the following data:

set.seed(1)

data <- data.frame(
id = 1:500, ht_1 = rnorm(500,10:20), ht_2 = rnorm(500,15:25),
ht_3 = rnorm(500,20:30), ht_4 = rnorm(500,25:35), 
ht_5 = rnorm(500,20:40)
)

I would like to identify the values in columns ht_1:ht_4 that are greater than the values in column ht_5 (number of observations and means).

For each of these columns, I would then like to replace any values that are greater than ht_5 with ht_5 .

Hi you can use the mutate_at function like this:

library(tidyverse)

data %>% as_tibble %>% 
  mutate_at(vars(paste0("ht_", 1:4)), ~if_else(.x > ht_5, ht_5, .x))

In this case you can also use pmin instead of if_else which should be faster.

data %>% as_tibble %>% 
      mutate_at(vars(paste0("ht_", 1:4)), ~pmin(.x, ht_5))

To see how many values are greater than ht_5 you can use the summarise_at function:

data %>% as_tibble %>% 
  summarize_at(vars(paste0("ht_", 1:4)), ~ length(.x[.x > ht_5]))

# A tibble: 1 x 4
   ht_1  ht_2  ht_3  ht_4
  <int> <int> <int> <int>
1     6    39   131   258

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM