109

如何在值是可复制的向量中列出不同的值?我的意思是,类似于以下 SQL 语句:

SELECT DISTINCT product_code
FROM data
4

7 回答 7

190

你的意思是unique

R> x = c(1,1,2,3,4,4,4)
R> x
[1] 1 1 2 3 4 4 4
R> unique(x)
[1] 1 2 3 4
于 2011-10-13T14:08:06.693 回答
14

如果数据实际上是 afactor那么您可以使用该levels()功能,例如

levels( data$product_code )

如果它不是一个因素,但它应该是,你可以先使用factor()函数将其转换为因素,例如

levels( factor( data$product_code ) )

如上所述,另一个选项是unique()函数:

unique( data$product_code )

两者之间的主要区别(当应用于 a 时factorlevels将返回按级别顺序排列的字符向量,包括已编码但未出现的任何级别。将按照值首先出现的顺序unique返回 a ,省略任何未发生的级别(尽管仍包含在返回的因子中)。factorlevels

于 2018-04-18T03:11:14.563 回答
8

尝试将重复函数与否定运算符“!”结合使用。

例子:

wdups <- rep(1:5,5)
wodups <- wdups[which(!duplicated(wdups))]

希望有帮助。

于 2011-10-13T14:07:18.600 回答
7

您还可以在 R 中使用 sqldf 包。

Z <- sqldf('SELECT DISTINCT tablename.columnname FROM tablename ')
于 2016-03-31T23:43:05.060 回答
0

另一种方法是使用dplyr包:

x = c(1,1,2,3,4,4,4)
dplyr::distinct(as.data.frame(x))
于 2020-09-25T07:18:02.143 回答
0

R Language(版本 3.0+)中,您可以应用过滤器以从列表中获取唯一性 -

data.list <- data.list %>% unique

或将其与其他操作结合使用

data.list.rollnumbers <- data.list %>% pull(RollNumber) %>% unique

unique不需要dplyr

于 2021-01-05T07:38:09.327 回答
0

这也可能有效,

1) unlist(lapply(mtcars, function(x) length(unique(x))))
2) lapply(mtcars, function(x) unique(x))

结果,

  1. mpg  cyl disp   hp drat   wt qsec   vs   am gear carb 
     25    3   27   22   22   29   30    2    2    3    6 
    
  2. $mpg
    [1] 21.0 22.8 21.4 18.7 18.1 14.3 24.4 19.2 17.8 16.4 17.3 15.2 10.4 14.7 32.4 30.4 33.9 21.5 15.5 13.3 27.3 26.0 15.8 19.7 15.0
    $cyl
    [1] 6 4 8
    $ and so on....
    
于 2021-04-27T08:35:36.243 回答