根据条件或 ID 匹配和返回值
Matching and returning values based on condition or ID
这看起来应该相当简单,但我遇到了麻烦。
示例:我有一个包含两列 IDs
和 perc_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"])
这看起来应该相当简单,但我遇到了麻烦。
示例:我有一个包含两列 IDs
和 perc_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"])