【问题标题】:Compare column values against another column将列值与另一列进行比较
【发布时间】:2019-03-05 10:48:07
【问题描述】:

我有以下数据:

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 的值。

【问题讨论】:

  • 到目前为止你尝试了什么??
  • data %&gt;% mutate(ht_1 = ifelse(ht_1 &gt; ht_5, ht_1, ht_5)) 生产你所追求的吗?

标签: r dplyr data-manipulation


【解决方案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

【讨论】:

  • 谢谢,但我想先看看有多少值大于 ht_5
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多