【发布时间】:2026-02-10 07:40:02
【问题描述】:
我在 R 中有以下数据框
library(dplyr)
library(tidyr)### IMPORTED LIBRARIES
DF<-data.frame("Index"=c(1,2,3,4,5,6,7,8,9,10))
DF$CI=c("A1", "A2", "A3", "A4", 'A1', "A6", "A7", "A8", "A9", "A9")
数据框由两列组成,一列是序列号从 1 到 10 的索引列,另一列是 CI。 CI 列中的值可能是唯一的或重复的。数据框如下所示
Index CI
1 1 A1
2 2 A2
3 3 A3
4 4 A4
5 5 A1
6 6 A6
7 7 A7
8 8 A8
9 9 A9
10 10 A9
我想添加一列 EI,指示正确的索引值,以防 CI 中的值重复。预期输出如下
Index CI EI
1 1 A1 1
2 2 A2 2
3 3 A3 3
4 4 A4 4
5 5 A1 1
6 6 A6 6
7 7 A7 7
8 8 A8 8
9 9 A9 9
10 10 A9 9
EI 列应显示与 CI 列中的条目对应的相应索引值。在重复的情况下,返回的值应该是最小索引值。我已经使用 DPLYR 尝试了以下代码
DF%>%mutate(EI=case_when(CI==unique(CI)~min(Index)))
我得到以下输出。
Index CI EI
1 1 A1 1
2 2 A2 1
3 3 A3 1
4 4 A4 1
5 5 A1 NA
6 6 A6 NA
7 7 A7 NA
8 8 A8 NA
9 9 A9 NA
10 10 A9 NA
我也试过这段代码,但没有得到想要的输出
DF%>%mutate(EI=min(Index))
输出
Index CI EI
1 1 A1 1
2 2 A2 1
3 3 A3 1
4 4 A4 1
5 5 A1 1
6 6 A6 1
7 7 A7 1
8 8 A8 1
9 9 A9 1
10 10 A9 1
我在这里请求一些帮助。我正在使用 DPLYR,因为数据集很大(我给出了一个玩具数据集)并且循环需要很长时间。
【问题讨论】:
-
DF %>% mutate(EI = group_indices(., CI))或者您正在寻找DF %>% group_by(CI) %>% mutate(EI = min(Index)) -
替代:
DF %>% mutate(EI = match(CI, CI)) -
@RonakShah 还有
EI = first(Index),而不是min(Index)。 -
@Rui Barradas first(Index) 与 min(Index) 有何不同