从R数据框中删除重复时如何保留上一行[重复]

问题描述 投票:1回答:3

这个问题在这里已有答案:

我有下面提到的数据帧:

DF1

T1  ID   Type
1   A    L
2   B    Y
3   C    B
4   D    U
5   E    Z

DF2

T1  ID   Type
1   A    L
2   B    Y
3   F    K
4   G    I
5   H    T

现在我想合并DF1DF2但是在New_Data中每一行都应该是唯一的,基于数据框架的ID coloumn。

必填数据框:

新数据

T1  ID   Type
1   A    L
2   B    Y
3   C    B
4   D    U
5   E    Z
3   F    K
4   G    I
5   H    T
r dataframe dplyr tidyr
3个回答
1
投票

行绑定两个数据帧,然后根据ID列或ID + Type列删除重复项(基于来自bind_rows中后来数据帧的id列的重复行将被删除):

bind_rows(df1, df2) %>% distinct(ID, Type, .keep_all = T)

#  T1 ID Type
#1  1  A    L
#2  2  B    Y
#3  3  C    B
#4  4  D    U
#5  5  E    Z
#6  3  F    K
#7  4  G    I
#8  5  H    T

仅基于ID列:

bind_rows(df1, df2) %>% distinct(ID, .keep_all = T)

#  T1 ID Type
#1  1  A    L
#2  2  B    Y
#3  3  C    B
#4  4  D    U
#5  5  E    Z
#6  3  F    K
#7  4  G    I
#8  5  H    T

3
投票

我想你可以用

unique(rbind(DF1,DF2))

0
投票

我不确定这是否正是您想要的,但是要组合数据帧,您可以使用merge函数:

# merge two data frames by ID
New_Data <- merge(DF1, DF2 ,by="ID", all=TRUE)

“all”参数仅表示对于DF1中的所有ID和DF2中的所有ID,New_Data中将有一行。但是,合并不应该重复行。有关详细信息,我建议查找内部和外部联接以及合并功能的文档。

以下是一些链接:

编辑:如果您不想处理合并,绑定行也将起作用。行绑定在一个数据帧的顶部执行垂直堆叠。要按字母顺序排序堆叠数据,您可以尝试:

New_Data <- unique(rbind( DF1, DF2))
New_Data <-  New_Data[order(ID),] 
© www.soinside.com 2019 - 2024. All rights reserved.