列中所有第一个变量出现的R子集行

SPZ*_*SPZ 0 r subset dataframe

我想基于两列ColA和ColB(下面)创建一个大型数据框的子集.对于ColA中的每个变量(例如A,B,C ......),我想提取与ColB中第一个变量的每次出现相对应的行.因此DF1:

ColA  ColB  ColC
A     Red     7thing
A     Red     OneBot
A     Blue    BotOne
B     Green   Thing7
B     Green   Twosies
B     Green   Square
B     Yellow  Circle
B     Yellow  Polygon
B     Purple  Triangle
B     White   Octagon
C     Orange  Cube
C     Black   Line
Run Code Online (Sandbox Code Playgroud)

将成为DF2:

ColA  ColB  ColC
A     Red     7thing
A     Red     OneBot
B     Green   Thing7
B     Green   Twosies
B     Green   Square
C     Orange  Cube
Run Code Online (Sandbox Code Playgroud)

我不关心ColC中的重复项,并且ColB中变量的出现次数没有模式.我发现的相关子集策略侧重于提取独特的案例,但我既没有遇到也没有能够设计出允许选择第一个变量类型的所有事件的方法,并且会感激一些帮助.

我试过了

DF2 <- DF1[match(unique(DF1$ColB), DF1$ColB),]
Run Code Online (Sandbox Code Playgroud)

...当变量内容已知时(例如,子集在R中的数据帧中首先出现n个特定值的子集),并且这些子集化看起来不合适.

the*_*ail 5

的功率ave在基R,所有比较ColB例的第一ColB各组:

dat[with(dat, ColB == ave(ColB, ColA, FUN=function(x) head(x,1) )),]

#   ColA   ColB    ColC
#1     A    Red  7thing
#2     A    Red  OneBot
#4     B  Green  Thing7
#5     B  Green Twosies
#6     B  Green  Square
#11    C Orange    Cube
Run Code Online (Sandbox Code Playgroud)

使用原始逻辑,您还可以仅merge备份非重复记录ColA/ColB:

merge(dat, dat[c("ColA","ColB")][!duplicated(dat$ColA),])
Run Code Online (Sandbox Code Playgroud)