2012-02-17 50 views
4

简单的问题。考虑这个载体:如何在向量中获得“谁与谁不同”与R

[1] 378 380 380 380 380 360 187 380 

我们如何确定哪些数字与该列表中的其他数据不同?那么这将是378 360和187.任何想法?我知道解决方案可能并不简单...

我正在学习R并为我的研究工作在数据集上,所以它是!=作业。

任何帮助将不胜感激!

+10

恭喜!你问了关于用R语言标记的第10,000个问题。可悲的是,唯一的奖项是一个很好的答案。 – joran 2012-02-17 06:42:19

+0

AHahah,太棒了!我认为得到一个好的答案是一个不错的价格! ;) – Chargaff 2012-02-17 13:12:54

+0

大 - 这是连续第二问题我已经浏览其自称为1e4th :-)(见约在http://stackoverflow.com/questions/9324869/how-do-i-determine-标记评论与作家-的-AN-R-包 – 2012-02-17 13:19:33

回答

2

您可以通过使用table()which.max()最频繁的条目,然后你可以索引包含非等逻辑矢量原矢量条目如下:data [data!= mostfrequent]。您可以通过?table()?which.max()获得帮助,如果您需要更多信息,请发表评论。

你的样本矢量

x <- c(378, 380, 380, 380, 380, 360, 187, 380) 

查找每个数字的频率在其与table。为了以后的方便,我们将其转换为数据框。

counts <- as.data.frame(table(x), stringsAsFactors = FALSE) 

which.max让我们找到模态值(最常见的一个)。

modal_value <- which.max(counts$Freq) 

其他值可以通过索引找到。

as.numeric(counts[-modal_value, "x"]) 
+0

哇,这是一个相当广泛的编辑 – 2012-02-17 08:38:21

+0

好吧,我从这个解决方案的经验教训。现在是否有可能将此解决方案应用于整个数据框或矩阵?也许我应该张贴与样本数据集的另一个问题... – Chargaff 2012-02-17 16:35:54

+0

@Chargaff是的,一个新的问题也会把它再次出现在网页列表。 – 2012-02-17 17:23:43

3

提取不重复的元素可以像做:

a<-c(378, 380, 380, 380, 380, 360, 187, 380) 
b <- table(a) 
names(b[b==1]) 
#[1] "187" "360" "378" 
+0

)如果“谁是不同”是指“那些只出现一次”,那么这个答案可能是最好的。如果“谁是不同的”意味着“每一个价值,但最常见的价值”然后看我的。 OP应该澄清这一点。 – 2012-02-17 06:55:44

+0

是的,有趣的评论,我应该有措辞我的问题是“每一个值,但最常见的一个”。 THanx澄清。 – Chargaff 2012-02-17 13:16:21

3

一种不同的方法:

x <- c(378, 380, 380, 380, 380, 360, 187, 380) 
y <- rle(sort(x)); y[[2]][y[[1]]==1] 
+0

这种方法应该是非常快,也返回数值 – 2012-02-17 06:47:37

+1

对不起排序是O(nlogn),积累,查找最大和索引是O(n) – 2012-02-17 06:53:37

+0

@eznme和寻找替代的方法来完成一个任务就是乐趣!实际上我发现泰勒的方法很有趣。我会有兴趣将他的方法与您的方法进行基准比较,因为表似乎不太适用于函数。只是供参考如果你只是指出某些东西或试图侮辱,很难判断。 – Dason 2012-02-17 07:24:39

4

也许另一种选择:

x <- c(378, 380, 380, 380, 380, 360, 187, 380) 
setdiff(unique(x), x[duplicated(x)])