使用'dplyr'库中的'select'功能选择唯一值

Yen*_*ici 53 select r unique dplyr

是否可以从库中的使用函数列中选择所有唯一值?用符号表示" " .data.frameselectdplyrSELECT DISTINCT field1 FROM table1SQL

谢谢!

Ron*_*man 87

在dplyr 0.3中,这可以使用该distinct()方法容易地实现.

这是一个例子:

distinct_df = df %>% distinct(field1)

您可以使用以下内容获取不同值的向量:

distinct_vector = distinct_df$field1

您还可以在执行distinct()调用的同时选择列的子集,如果使用head/tail/glimpse检查数据框,则可以更清晰地查看:

distinct_df = df %>% distinct(field1) %>% select(field1) distinct_vector = distinct_df$field1

  • 请注意,`distinct()`的工作方式在dplyr 0.5中已经改变.默认情况下`distinct()`现在只返回用作`distinct()`参数的列.如果你想保留其他列,你现在必须传递`.keep_all = TRUE`作为`distinct()的附加参数` (14认同)
  • 如果数据框已经在R中,则此方法有效,但如果您尝试通过数据库连接直接在数据库上执行查询(即`src_postgres()`),则无效.它报告:`错误:无法仅在具有SQL`的指定列上计算distinct (3认同)
  • 是的,dplyr 0.5打破了以前用0.3和不同的代码编写的代码.为什么要改变?以前的默认行为很有用,也是自然而然的方法. (2认同)

Jos*_*lan 12

只是为了添加其他答案,如果您希望返回向量而不是数据帧,则可以使用以下选项:

dplyr <0.7.0

将dplyr函数括在括号中并将其与$语法结合使用:

(mtcars %>% distinct(cyl))$cyl
Run Code Online (Sandbox Code Playgroud)

dplyr> = 0.7.0

使用pull动词:

mtcars %>% distinct(cyl) %>% pull()
Run Code Online (Sandbox Code Playgroud)


eip*_*i10 8

dplyr select函数从数据框中选择特定列.要在特定数据列中返回唯一值,可以使用该group_by函数.例如:

library(dplyr)

# Fake data
set.seed(5)
dat = data.frame(x=sample(1:10,100, replace=TRUE))

# Return the distinct values of x
dat %>%
  group_by(x) %>%
  summarise() 

    x
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
10 10
Run Code Online (Sandbox Code Playgroud)

如果要更改列名,可以添加以下内容:

dat %>%
  group_by(x) %>%
  summarise() %>%
  select(unique.x=x)
Run Code Online (Sandbox Code Playgroud)

这两者都x从数据框中dplyr返回的所有列中选择列(当然在这种情况下只有一列)并将其名称更改为unique.x.

您也可以直接在基地得到的唯一值Runique(dat$x).

如果您有多个变量并希望数据中出现所有唯一组合,则可以按如下方式概括上述代码:

set.seed(5)
dat = data.frame(x=sample(1:10,100, replace=TRUE), 
                 y=sample(letters[1:5], 100, replace=TRUE))

dat %>% 
  group_by(x,y) %>%
  summarise() %>%
  select(unique.x=x, unique.y=y)
Run Code Online (Sandbox Code Playgroud)

  • 或者在dplyr 0.3中使用新的`distinct()`函数 (7认同)