【发布时间】:2014-12-08 16:46:19
【问题描述】:
我是新的 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
第二个数据框“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 个。
基于这里的问题Order data frame rows according to a target vector that specifies the desired order
我试着做那个代码
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
但是现在当我做 head(dfmax) 我得到了
[1] V1 V2
<0 rows> (or 0-length row.names)
我无法理解,当我执行 str(dfmax) 时,我得到了与以前相同的字符变量顺序,没有任何改变。我在吠叫错误的树吗?还有另一种我不知道的方法来解决这个问题吗?还是我试图不正确地执行此功能?
感谢您的宝贵时间和帮助。
【问题讨论】: