R语言第二章数据处理②选择行
2018-12-06 本文已影响221人
柳叶刀与小鼠标
目录
R语言第二章数据处理①选择列
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)