R语言第二章数据处理②选择行

时间:2022-06-16
本文章向大家介绍R语言第二章数据处理②选择行,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

正文

这篇博客主要介绍学习以下R函数:

slice():按位置提取行 filter():提取符合特定逻辑条件的行。 例如,iris%>%filter(Sepal.Length> 6)。 filter_all(),filter_if()和filter_at():过滤变量然后选择行。 这些函数复制所有变量或变量选择的逻辑标准。 sample_n():随机选择n行 sample_frac():随机选择一小部分行 top_n():选择变量排序的前n行

R语言常用的逻辑符号

<:少于
>:大于
<=:小于或等于
>=:大于或等于
==:相等
!=:不相等
%in%:在之内。 例如,“a in%c(2,3)”表示a可能等于2或3。
is.na():是NA
!is.na():不是NA。
 value == 2 | 3:表示值等于2或3。与value%c(2,3)相同
&:和。 例如,性别==“女性”&年龄> 25岁

根据属性值选择行

# 选择Sepal.Length > 7的行
my_data %>% filter(Sepal.Length > 7)
#选择Sepal.Length > 6.7, Sepal.Width <= 3的行
my_data %>% filter(Sepal.Length > 6.7, Sepal.Width <= 3)
#选择Sepal.Length > 6.7, Species == "versicolor"的行
my_data %>% filter(Sepal.Length > 6.7, Species == "versicolor")
#选择 Sepal.Length > 6.7,且Species == "versicolor"或者 Species == "virginica"的行

my_data %>% filter(
  Sepal.Length > 6.7, 
  Species == "versicolor" | Species == "virginica"
  )
#选择 Sepal.Length > 6.7,且Species == "versicolor"或者 Species == "virginica"的行
my_data %>% filter(
  Sepal.Length > 6.7, 
  Species %in% c("versicolor", "virginica" )
  )

过滤变量后选择行

通过删除分组列“Species”,从my_data创建一个新的演示数据集:

#去掉Species列
my_data2 <- my_data %>% select(-Species)
#选择所有属性大于2的行
my_data2 %>% filter_all(all_vars(.> 2))
#选择任何一个属性大于2的行
my_data2 %>% filter_all(any_vars(.> 2))
#选择以sep开头的属性任一大于2的行
my_data2 %>% filter_at(vars(starts_with("Sep")), any_vars(. > 2))

根据缺失值筛选行

friends_data <- data_frame(
  name = c("A", "B", "C"),
  age = c(27, 25, 29),
  height = c(180, NA, NA),
  married = c("yes", "yes", "no")
)

#选择height属性是NA的行
friends_data %>% filter(is.na(height))
#选择height属性非NA的行
friends_data %>% filter(!is.na(height))

从数据框中选择随机行

可以使用函数sample_n()选择n个随机行,也可以使用sample_frac()选择行的随机分数。 我们首先使用函数set.seed()来启动随机数生成器引擎。 这对于用户重现分析非常重要。

set.seed(1234)
#无放回的随机取五行
my_data %>% sample_n(5, replace = FALSE)
#无放回的随机取5%行
my_data %>% sample_frac(0.05, replace = FALSE)
#根据Sepal.Length值取最大的五行
my_data %>% top_n(5, Sepal.Length)
#根据Species分组,然后以Sepal.Length值取最高的五行
my_data %>% 
  group_by(Species) %>%
  top_n(5, Sepal.Length)

总结:

按逻辑条件筛选行:my_data%>%filter(Sepal.Length> 7) 选择n个随机行:my_data%>%sample_n(10) 选择行的随机分数:my_data%>%sample_frac(10) 按值选择前n行:my_data%>%top_n(10,Sepal.Length)