按列合并 R 中的两个数据框并按一个值对列进行排序

Merge two dataframes in R column-wise and sort columns by one value

我在 R 中有两个数据帧,如下所示:

Dataframe 1 
|word  |a1 |a2 |a3 |...|
|apple |0.5|0.3|0.2|...|
|pear  |0.2|0.2|0.6|...|
|banana|0.6|0.1|0.3|...|
|cherry|0.4|0.5|0.1|...|

    Dataframe 2 
|a1     |a2     | a3    |...|
|banana |cherry |pear   |...|
|apple  |apple  |banana |...|
|cherry |pear   |apple  |...|
|pear   |banana |cherry |...|

Dataframe 2 中的名称按它们在 Dataframe 1 中的值排序 - 这些是我从 textmineR 包中获得的顶级术语,以及我模型中的 GetTopTerms 函数。但是,我不知道如何将我拥有的 phi 值与该值所属的每个单词结合起来。换句话说,我想要的输出是上面两个数据框的组合——其中 phi 值在每一列中从最高到最低列出,如下所示:

|a1_term |a1_phi | a2_term |a2_phi | a3_term  |a3_phi |...|
|banana  |0.6    |cherry   |0.5    |pear      |0.6    |...|
|apple   |0.5    |apple    |0.3    |banana    |0.3    |...|  
|cherry  |0.4    |pear     |0.2    |apple     |0.2    |...|
|pear    |0.2    |banana   |0.1    |cherry    |0.1    |...|

是否有一个简单的函数来合并这两个表,如上所示,以及在合并时将每个 phi 值从最低到最高排序。谢谢!

这是使用 dplyrreshape2 的解决方案。如果按 phi 排序,则不需要第二个数据框。这里,df是第一个数据框。

library(dplyr)
library(reshape2)
library(tidyselect)

do.call("cbind", melt(df) %>%
                 split(.$variable) %>% 
                 lapply(function(x) x %>% arrange(-value))) %>% 
select(!ends_with("variable"))

#>   a1.word a1.value a2.word a2.value a3.word a3.value
#> 1  banana      0.6  cherry      0.5    pear      0.6
#> 2   apple      0.5   apple      0.3  banana      0.3
#> 3  cherry      0.4    pear      0.2   apple      0.2
#> 4    pear      0.2  banana      0.1  cherry      0.1


数据

df <- structure(list(word = c("apple", "pear", "banana", "cherry"), 
    a1 = c(0.5, 0.2, 0.6, 0.4), a2 = c(0.3, 0.2, 0.1, 0.5), a3 = c(0.2, 
    0.6, 0.3, 0.1)), class = "data.frame", row.names = c(NA, -4L))

df
#>     word  a1  a2  a3
#> 1  apple 0.5 0.3 0.2
#> 2   pear 0.2 0.2 0.6
#> 3 banana 0.6 0.1 0.3
#> 4 cherry 0.4 0.5 0.1