按列合并 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 值从最低到最高排序。谢谢!
这是使用 dplyr
和 reshape2
的解决方案。如果按 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
我在 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 值从最低到最高排序。谢谢!
这是使用 dplyr
和 reshape2
的解决方案。如果按 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