a1 a2 a3 b1 b2 b3
ACTTG 10 0.345 AGGTC 2 0.198
AGTTC 2 0.244 GGTAA 1 0.022
AGGTC 4 0.211 CGTTA 1 0.022
CGTTA 1 0.111
GCTAT 1 0.111
我需要找到匹配并组合新数据框中的a2,a3,b2,b3的a1和b1值,如下表所示。简而言之,我正在尝试删除a1和b1列之间的重复值。匹配的值可以或可以不在同一行上。
a1 a2 a3 b2 b3
AGGTC 4 0.211 2 0.198
CGTTA 1 0.111 1 0.022
我正在考虑使用match(),但是我无法理解。我对r不太熟悉。我将不胜感激任何建议。预先感谢。
答案 0 :(得分:2)
使用match可能会产生一些混乱,但是我建议改用merge()。
df1<-data.frame(c("A","B","C"),c(1,2,3))
df2<-data.frame(c("B","A","d"),c(5,7,9))
names(df1)<-c("id","a1")
names(df2)<-c("id","b1")
merge(df1,df2,by="id")
id a1 b1
1 A 1 7
2 B 2 5
答案 1 :(得分:1)
您可以使用内部联接
df1 <- data.table::fread("a1 a2 a3
ACTTG 10 0.345
AGTTC 2 0.244
AGGTC 4 0.211
CGTTA 1 0.111
GCTAT 1 0.111")
df2 <- data.table::fread("b1 b2 b3
AGGTC 2 0.198
GGTAA 1 0.022
CGTTA 1 0.022")
# Keep only rows that both df have in common
df1 %>%
dplyr::inner_join(df2,
by= c("a1" = "b1")) #need to specify column do join on
# a1 a2 a3 b2 b3
# 1: AGGTC 4 0.211 2 0.198
# 2: CGTTA 1 0.111 1 0.022
# Keep all rows of `left' df
df1 %>% dplyr::left_join(df2, by= c("a1" = "b1"))
# a1 a2 a3 b2 b3
# 1: ACTTG 10 0.345 NA NA
# 2: AGTTC 2 0.244 NA NA
# 3: AGGTC 4 0.211 2 0.198
# 4: CGTTA 1 0.111 1 0.022
# 5: GCTAT 1 0.111 NA NA