R 根据另一个数据帧中的行顺序对数据帧中的行重新排序

R 根据另一个数据帧中的行顺序对数据帧中的行重新排序,r,dataframe,rows,R,Dataframe,Rows,我是一个新的R用户,也是StackOverflow的新手。我会尽我最大的努力简洁明确地提出我的问题,如果没有以最好的方式表达我的歉意 我正在使用两个数据帧。我想对一个数据帧中的行进行重新排序,使其与第二个数据帧中的行的顺序相同,这样我就可以将数据从一个数据帧添加到另一个数据帧,并且它们的格式相同。我想要根据的列对行进行重新排序,它是一个具有不同观察区域的字符串标识符的列 第一个数据帧“dfverif”看起来(总之)像 第二个数据帧“dfmax”如下所示 variable value DALZZ

我是一个新的R用户,也是StackOverflow的新手。我会尽我最大的努力简洁明确地提出我的问题,如果没有以最好的方式表达我的歉意

我正在使用两个数据帧。我想对一个数据帧中的行进行重新排序,使其与第二个数据帧中的行的顺序相同,这样我就可以将数据从一个数据帧添加到另一个数据帧,并且它们的格式相同。我想要根据的列对行进行重新排序,它是一个具有不同观察区域的字符串标识符的列

第一个数据帧“dfverif”看起来(总之)像

第二个数据帧“dfmax”如下所示

variable value
DALZZ   2.14
DALZZ   2.02
DALZZ   2.04
CBUCG   1.83
CBUCG   2.09
CBUCG   1.96
CBUCG   1.98
DAHEI   2.25
DAHEI   2.05
DAHEI   2.08
DAFQX   2.12
DAFQX   2.12
DAFQX   2.04
BAARG   2.12
BAARG   2.56
BAARG   2.56
我想根据第一个数据帧中字符向量行的顺序对第二个数据帧的行重新排序。但是,有许多重复的字符串,因为这是时间序列数据,所以我不能使用match,也不能删除重复的字符串,因为它们包含必要的数据。此外,第二个数据帧比第一个数据帧小得多(它是时间序列数据的最大值,而不是原始观测值)。我知道限制cbind和rbind,但如果需要,可以使用rbind.fill和cbindX,尽管我不确定它们是否在这里。实际上,这些数据帧有更多的列,但为了简洁起见,我这里只包括了2列

基于这里的问题

我试过用那个密码

target <- dfverif
idx <- sapply(target,function(x){
which(dfmax$variable==x)
})
idx <- unlist(idx) ##I added this because the code gave me errors because idx is classified as a list so R couldn't do the dfmax[idx,] component
dfmax <- dfmax[idx,]
rownames(dfmist) <- NULL

target我不愿意接受不能使用
match
。它确实返回一个可能不唯一的结果,但您没有说需要进行二次排序,如果您这样做了,它可以很容易地作为第二个参数添加到
order
。我在第二个数据帧的各种简化子集上测试了这一点,包括一个只有每个
变量的单个实例的子集

长度上的差异不应该成为问题。在这里,我首先演示d2('dfmax',更短)与d1('dfverif',更长)的顺序,然后是d1与d2的顺序:

d2[ order(match(d2$variable, d1$Variable)), ]
   variable value
11    DAFQX  2.12
12    DAFQX  2.12
13    DAFQX  2.04
8     DAHEI  2.25
9     DAHEI  2.05
10    DAHEI  2.08
14    BAARG  2.12
15    BAARG  2.56
16    BAARG  2.56
4     CBUCG  1.83
5     CBUCG  2.09
6     CBUCG  1.96
7     CBUCG  1.98
1     DALZZ  2.14
2     DALZZ  2.02
3     DALZZ  2.04
d1[ order(match(d1$Variable, d2$variable)), ]

   Variable Value
17    DALZZ     9
18    DALZZ     9
19    DALZZ     9
20    DALZZ     9
13    CBUCG     9
14    CBUCG     9
15    CBUCG     9
16    CBUCG     9
5     DAHEI     9
6     DAHEI     9
7     DAHEI     9
8     DAHEI     9
1     DAFQX     9
2     DAFQX     9
3     DAFQX     9
4     DAFQX     9
9     BAARG     9
10    BAARG     9
11    BAARG     9
12    BAARG     9

我现在明白了,但是顺序(匹配(,)的使用应该还是成功的,不是吗?我的回答实际上产生了一个错误的结果,所以我删除了它。你的方法是:)在我做的测试用例上做得很好;您应该在问题中发布
dput(head(dfmax))
dput(head(dverif))
的输出作为编辑。我必须保存数据帧,然后用标题读取它们,并给它们列名称,然后它就工作了。非常感谢!:)
[1] V1 V2
<0 rows> (or 0-length row.names)
d2[ order(match(d2$variable, d1$Variable)), ]
   variable value
11    DAFQX  2.12
12    DAFQX  2.12
13    DAFQX  2.04
8     DAHEI  2.25
9     DAHEI  2.05
10    DAHEI  2.08
14    BAARG  2.12
15    BAARG  2.56
16    BAARG  2.56
4     CBUCG  1.83
5     CBUCG  2.09
6     CBUCG  1.96
7     CBUCG  1.98
1     DALZZ  2.14
2     DALZZ  2.02
3     DALZZ  2.04
d1[ order(match(d1$Variable, d2$variable)), ]

   Variable Value
17    DALZZ     9
18    DALZZ     9
19    DALZZ     9
20    DALZZ     9
13    CBUCG     9
14    CBUCG     9
15    CBUCG     9
16    CBUCG     9
5     DAHEI     9
6     DAHEI     9
7     DAHEI     9
8     DAHEI     9
1     DAFQX     9
2     DAFQX     9
3     DAFQX     9
4     DAFQX     9
9     BAARG     9
10    BAARG     9
11    BAARG     9
12    BAARG     9