根据条件或 ID 匹配和返回值

Matching and returning values based on condition or ID

这看起来应该相当简单,但我遇到了麻烦。

示例:我有一个包含两列 IDsperc_change 的数据框。我想知道哪个独特 IDs 的变化超过 30%。

IDs <- c(1,1,2,1,1,2,2,2,3,2,3,4,5,6,3)
perc_change <- c(50,40,60,70,80,30,20,40,23,25,10,30,12,7,70)
df <- data.frame(IDs, perc_change)

到目前为止:

if (df$perc_change > 30) {
unique(df$IDs)
} else {
}

这显然行不通,因为它 returns 都是独一无二的 IDs。我应该找到索引然后匹配它还是什么?

提前致谢!

只需使用 [ 进行子集化并取 unique - 即不需要 if/else 条件

 with(df, unique(IDs[perc_change > 30]))
[1] 1 2 3

我们可以使用 dplyr 进行分组、过滤和计数

> library(dplyr)
> df %>% 
    group_by(IDs) %>% 
    filter(perc_change > 30) %>% 
    count(IDs)
# A tibble: 3 x 2
# Groups:   IDs [3]
    IDs     n
  <dbl> <int>
1     1     4
2     2     2
3     3     1

我们可以这样做,获取每个 ID 的值:

library(dplyr)

df %>% 
    group_by(IDs) %>% 
    filter(perc_change > 30) %>% 
    mutate(values = paste0(perc_change, collapse = ","), .keep="unused") %>% 
    distinct(IDs, .keep_all = TRUE)

输出:

    IDs values     
  <dbl> <chr>      
1     1 50,40,70,80
2     2 60,40      
3     3 70   
unique(df[df$perc_change > 30,"IDs"])