我是一名新的R语言用户,也是StackOverflow的新手。我会尽力简明扼要地表达我的问题,如果没有传达清楚,请谅解。
我正在处理两个数据框。我想按照第二个数据框中行的顺序重新排列一个数据框的行,以便我可以使用相同的格式将一个数据框的数据添加到另一个数据框中。我想根据一个包含不同观测区域的字符标识符的列来重新排序行。
第一个数据框"dfverif"(摘要)如下:
第二个数据帧“dfmax”的外观如下:
我想按照第一个数据框中字符向量的顺序重新排列第二个数据框的行,但由于这是时间序列数据,有许多重复的字符串,所以我不能使用match函数,并且我也不能删除重复项,因为它们包含必要的数据。另外,第二个数据框比第一个数据框小得多(它是时间序列数据的最大值而不是原始观测值)。我知道cbind和rbind可以限制,但如果需要,可以使用rbind.fill和cbindX,尽管我不确定是否需要使用它们。实际上,这些数据框具有更多列,但出于简洁考虑,我只包含了两列。
但是现在当我执行 head(dfmax) 命令时,会得到以下结果:
我正在处理两个数据框。我想按照第二个数据框中行的顺序重新排列一个数据框的行,以便我可以使用相同的格式将一个数据框的数据添加到另一个数据框中。我想根据一个包含不同观测区域的字符标识符的列来重新排序行。
第一个数据框"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,尽管我不确定是否需要使用它们。实际上,这些数据框具有更多列,但出于简洁考虑,我只包含了两列。
根据这里的问题 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)时,字符变量的排序方式与之前相同,没有发生任何变化。我是否走错了路?还有其他方法可以解决这个问题吗?或者我是否未正确地执行此函数?
非常感谢你的时间和帮助。
dput(head(dfmax))
和dput(head(dverif))
的输出作为编辑发布在您的问题中。 - IRTFM