Сравнить значения столбца с другим столбцом - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующие данные:

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)
)

Я бы хотел определить значения в столбцах ht_1:ht_4, которые больше значений в столбце ht_5 (количество наблюдений и средних значений).

Для каждого из этих столбцов я хотел бы заменить любые значения, которые больше ht_5, на ht_5.

1 Ответ

1 голос
/ 05 марта 2019

Привет, вы можете использовать функцию mutate_at следующим образом:

library(tidyverse)

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

В этом случае вы также можете использовать pmin вместо if_else, который должен быть быстрее.

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

Чтобы увидеть, сколько значений больше ht_5, вы можете использовать функцию summarise_at:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...