我有以下数据:
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
的值。
答案 0 :(得分:1)
嗨,您可以像这样使用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