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

abi*_*hop 4 r rows dataframe

我是一个新的R用户,也是StackOverflow的新用户.我会尽力简明扼要地问我的问题,如果没有以最好的方式传达我的道歉.

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

第一个数据帧"dfverif"看起来(总结)就像

Variable Value  
DAFQX   9   
DAFQX   9   
DAFQX   9   
DAFQX   9   
DAHEI   9   
DAHEI   9   
DAHEI   9   
DAHEI   9   
BAARG   9       
BAARG   9       
BAARG   9   
BAARG   9   
CBUCG   9   
CBUCG   9   
CBUCG   9   
CBUCG   9   
DALZZ   9   
DALZZ   9   
DALZZ   9   
DALZZ   9   
Run Code Online (Sandbox Code Playgroud)

第二个数据帧"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
Run Code Online (Sandbox Code Playgroud)

我想根据第一个数据帧中字符向量的行的顺序重新排序第二个数据帧的行.但是,有许多重复的字符串,因为这是时间序列数据,所以我不能使用匹配,我不能删除重复项,因为它们保存必要的数据.此外,第二个数据帧远小于第一个数据帧(它是时间序列数据的最大值而不是原始观测值).我知道限制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
Run Code Online (Sandbox Code Playgroud)

但现在,当我做头(dfmax)时,我得到了

[1] V1 V2
<0 rows> (or 0-length row.names)
Run Code Online (Sandbox Code Playgroud)

这是我无法理解的,当我做str(dfmax)时,我得到了与之前相同的字符变量排序,没有任何改变.我吠叫错了树吗?有没有其他方法来解决这个我不知道的方法?或者我试图不正确地执行此功能?

感谢您的时间和帮助.

42-*_*42- 5

我不愿意接受match不能使用的东西.它确实返回了一个可能非唯一的结果,但是您没有说出需要进行二次排序的任何内容,如果您这样做,可以很容易地将其添加为第二个参数order.我在第二个数据帧的各种简化子集上测试了这个,包括一个只有每个实例的单个实例的子集variable.

长度的差异不应成为问题.在这里,我首先通过d1('dfverif',更长)来说明d2('dfmax',更短)的排序,然后按d2排序d1:

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
Run Code Online (Sandbox Code Playgroud)