Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中查找唯一元组但忽略顺序_R_Unique - Fatal编程技术网

在R中查找唯一元组但忽略顺序

在R中查找唯一元组但忽略顺序,r,unique,R,Unique,因为我的数据要复杂得多,所以我制作了一个较小的样本数据集(我保留了重塑以显示我是如何生成数据的) 这导致 > dcast(temp_df, Year ~ Rank) Using ID as value column: use value.var to override. Year 1 2 3 4 1 2010 D B A C 2 2011 A C D B 3 2012 A B D C 4 2013 D A C B 5 2014 C A B D 现在我基本上想使用像unique这样的函

因为我的数据要复杂得多,所以我制作了一个较小的样本数据集(我保留了重塑以显示我是如何生成数据的)

这导致

> dcast(temp_df, Year ~ Rank)
Using ID as value column: use value.var to override.
  Year 1 2 3 4
1 2010 D B A C
2 2011 A C D B
3 2012 A B D C
4 2013 D A C B
5 2014 C A B D
现在我基本上想使用像unique这样的函数,但忽略顺序来查找前3个元素的唯一性

因此,在这种情况下:

我会在第五排有A,B,C

我会把A,B,D放在第1行和第3行

我会在第2行和第4行有A,C,D

我还需要这些“独特”事件的计数

还有两件事。首先,我的值是字符串,我需要将它们保留为字符串。
第二,如果可能的话,我会在年份和1之间有一个称为权重的列,然后在计算这些独特的组合时,我会包括每个组合的权重。这一点并不重要,因为所有权重都是小的正整数值,因此我可以提前复制行以说明权重,然后将唯一对制成表格。

您可以这样做:

df <- dcast(temp_df, Year ~ Rank)

combos <- apply(df[, 2:4], 1, function(x) paste0(sort(x), collapse = ""))

combos
#     1     2     3     4     5 
# "BCD" "ABC" "ACD" "BCD" "ABC" 

这是与@Alex_A相同的解决方案,但使用了tidyverse函数:

library(purrr)
library(dplyr)
df <- dcast(temp_df, Year ~ Rank)

distinct(df, ID = pmap_chr(select(df, num_range("", 1:3)), 
                           ~paste0(sort(c(...)), collapse="")))
库(purrr)
图书馆(dplyr)

df您应该使用
set.seed
来实现再现性哇哦,这是我睡眠不足的结果。这非常有效,您能带我浏览一下
paste0(sort(x),collapse=“”)
吗,因为这当然不是我的真实数据,而且数据字符串更长。我知道什么是粘贴,但不是粘贴0,折叠是否会删除名称之间的引号?@qwertylpc:很高兴听到它适合你。我补充了一些解释。如果还有什么不清楚的地方,请告诉我。
table(combos)
# ABC ACD BCD 
#   2   1   2 
library(purrr)
library(dplyr)
df <- dcast(temp_df, Year ~ Rank)

distinct(df, ID = pmap_chr(select(df, num_range("", 1:3)), 
                           ~paste0(sort(c(...)), collapse="")))