在本教程中,您将学习如何使用R函数select()和pull()[在dplyr包中]按名称和位置选择数据框的列。我们还将展示如何从数据框架中删除列。
包含以下函数:
pull(): 以向量的形式提取列值. 可以通过名称或索引指定感兴趣的列。
select():将一个或多个列提取为一个数据表。它还可以用于从数据框架中删除列。
select_if(): 根据特定条件选择列。例如,可以使用这个函数来选择列(如果它们是数值型的)。
帮助函数 - starts_with(), ends_with(), contains(), matches(), one_of(): Select columns/variables based on their names
需要的包
加载 tidyverse 包,该R包中包含 dplyr 包:
library(tidyverse)
示例数据
我们将使用R内置的iris数据集,首先将其转换为tibble数据框(tbl_df),以便于进行数据分析。
my_data <- as_tibble(iris)
my_data
以向量vector 的形式提取列值
my_data %>% pull(Species)
将列提取为数据表
1)按位置选择列
#选择1至3列
my_data %>% select(1:3)
#选择1和3列,不要2列
my_data %>% select(1,3)
按名称选择列
#按名称选择下面两列 Sepal.Length and Petal.Length
my_data %>% select(Sepal.Length, Petal.Length)
#选择 Sepal.Length 至 Petal.Length之间的所有列
my_data %>% select(Sepal.Length:Petal.Length)
有几个特殊的函数可以在 select() 函数里面使用 starts_with(), ends_with(), contains(), matches(), one_of(), 等.
# 选择 名字以 "Petal" 开头的所以列
my_data %>% select(starts_with("Petal"))
# 选择 名字以 "Width" 结尾的所以列
my_data %>% select(ends_with("Width"))
# 选择名字中包含 "etal" 字符的所有列
my_data %>% select(contains("etal"))
# 选择其名称包含正则表达式的列
my_data %>% select(matches(".t."))
# 选择字符向量中提供的变量的所有列
my_data %>% select(one_of(c("Sepal.Length","Petal.Length")))
基于一个条件选择列
可以对列应用一个函数。选择函数返回TRUE的列。
只选择数值型的列:
my_data %>% select_if(is.numeric)
删除列
若要从数据框架中删除列,请在其名称前加上一个减号 -.
#删除 Sepal.Length 和 Petal.Length 列
my_data %>% select(-Sepal.Length, -Petal.Length)
#删除从 Sepal.Length 至 Petal.Length之间的所有列
my_data %>% select(-(Sepal.Length:Petal.Length))
#删除所有名称以 “Petal” 开头的列
my_data %>% select(-starts_with("Petal"))
注意,如果希望按位置放置列,语法如下所示。
# 删除第一列
my_data %>% select(-1)
# 删除1至3列
my_data %>% select(-(1:3))
# 删除第一和第三列,保留第二列
my_data %>% select(-1, -3)
总结
在本教程中,我们介绍如何根据位置和名称选择列。此外,我们还介绍了如何从数据框架中删除列。