我有两个数据帧:
DF1:
i1<-c(0,1,2,3,4)
loci<-c(2,2,3,2,3)
df1<-data.frame(i1,loci)
DF2:
i1<-c(0,0,0,0,0,1,1,1,2,2,2,2,3,3,3,4,4,4,4)
x<-c(343,434,23,232,3,34,422,245,2,2,2,4,553,234,532,234,23,34,23)
y<-c(33,545,88,8,88,86,4565,3434,234,34,545,234,2343,35,4,5,35,45,55)
df2<-data.frame(i1,x,y)
我想实现这个目标 -
i1<-c(0,1,2,3,4)
x<-c(434,422,2,234,34)
y<-c(545,4565,234,35,45)
df3<-data.frame(i1,x,y)
答案 0 :(得分:1)
您可以在loci
中创建一个df2
变量,该变量会在每个组中为i1
提供行索引,然后执行right_join()
到df1
,这是dplyr
的选项:
library(dplyr)
df2 %>%
group_by(i1) %>%
mutate(loci = row_number()) %>%
right_join(df1) %>%
select(-loci)
# Source: local data frame [5 x 3]
# Groups: i1 [5]
# i1 x y
# <dbl> <dbl> <dbl>
# 1 0 434 545
# 2 1 422 4565
# 3 2 2 545
# 4 3 234 35
# 5 4 34 45
答案 1 :(得分:1)
这是两种方法。 <{1}}方式接近Psidom,因此如果多余则忽略。
dplyr
答案 2 :(得分:0)
以下是使用merge
中的ave
和base R
的选项。使用ave
,我们创建一个按'i1'分组的序列列,然后使用'df1'创建merge
dfN <- merge(df1, transform(df2, loci= ave(i1, i1, FUN = seq_along)))[-2]