我在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")
数据帧由两列组成,索引列的序列号从一到十,第二列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
如果CI中的值重复,我想添加一列EI来指示正确的Index值。预期输出如下
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,因为数据集很大(我已经给出了一个玩具数据集),并且循环耗时很长。
答案 0 :(得分:2)
您希望Index
的最小值在CI
的匹配值之内。这就是group_by()
的用途:
DF %>%
group_by(CI) %>%
mutate(EI = min(Index))