【问题标题】:R dplyr: Creating groups from two identifiers ignoring permutationsR dplyr:从忽略排列的两个标识符创建组
【发布时间】:2017-08-29 19:45:16
【问题描述】:

在下面的数据中,每一行包括第一个实体(“Country1”)和第二个实体(“Country2”)。我想要一个变量,用 (Country1,Country2) = (Country1,Country2) 或 (Country1,Country2) = (Country2,Country1) 对行进行分组,即常见元素但忽略排列。

请对下面的脚本发表评论,该脚本似乎有效,但使用 by_row() 做了一些我不理解的事情。

library(tidyverse)
pairs0  <- read.table(header=TRUE, text="
Country1         Country2
A                B
B                A
A                C
")

## What I want to have: 
## Country1        Country2        pairID
## A               B               1
## B               A               1
## A               C               2

pairs1  <- by_row(pairs0,.collate="cols",
                  ..f=function(this_row) {
                      this_row[1,c("Country1","Country2")] %>% unlist %>% sort %>% paste
                  }
                  )

pairs2  <- mutate(pairs1,pairID = group_indices(pairs1,.out1,.out2))

【问题讨论】:

  • 我的回答对你有帮助吗?请考虑接受它(我的答案左侧的复选标记)

标签: r group-by tidyverse dplyr


【解决方案1】:

说明

pairs1  <- by_row(pairs0,.collate="cols",
                  ..f=function(this_row) {
                      this_row[1,c("Country1","Country2")] %>% unlist %>% sort %>% paste
                  }
                  )

by_row - 执行逐行操作(this_row
pairs0 - 要操作的数据帧
..f=function(this_row) { - 这是每个this_row的操作
this_row[1,c("Country1","Country2")] -单行 pairs0
unlist - 将单行数据框转换为向量
sort - 按字母顺序对向量的元素进行排序
paste - 将向量折叠成单个字符串

最后,对于每一行,你会得到类似的东西(即一个字符串)

"A B" 

完成解释

以下将为每个唯一组添加一个 ID 号

pairs2  <- mutate(pairs1,pairID = group_indices(pairs1,.out1,.out2))

mutate - 更改以下内容
pairs1 - 要操作的数据框
pairID - 要操作的列
group_indices - 唯一的组 ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多