Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ifelse条件:位于前n_R_Ggplot2_Dplyr - Fatal编程技术网

R ifelse条件:位于前n

R ifelse条件:位于前n,r,ggplot2,dplyr,R,Ggplot2,Dplyr,通常,当我需要geom_label()上的子集时,我使用ifelse()并指定一个数字,如下所示: 库(tidyverse) 数据=星战%>%过滤器(质量% ggplot(aes(x=质量,y=高度,标签=ifelse(出生年份>100,姓名,NA)))+ 几何点()+ geom_标签() #>警告:删除了包含缺失值的54行(geom_标签)。 由(v0.3.0)于2020年5月31日创建 但是对于我正在处理的数据集,我需要一个动态的解决方案,类似于ifelse(“出生年份在前n名中”,na

通常,当我需要
geom_label()
上的子集时,我使用
ifelse()
并指定一个数字,如下所示:

库(tidyverse)
数据=星战%>%过滤器(质量<500)
数据%>%
ggplot(aes(x=质量,y=高度,标签=ifelse(出生年份>100,姓名,NA)))+
几何点()+
geom_标签()
#>警告:删除了包含缺失值的54行(geom_标签)。

由(v0.3.0)于2020年5月31日创建

但是对于我正在处理的数据集,我需要一个动态的解决方案,类似于
ifelse(“出生年份在前n名中”,name,NA)


想法?

像这样的想法?获取前4个值

library(ggplot2)

data %>%
  ggplot(aes(x = mass, y = height, label = ifelse(birth_year >= sort(birth_year, decreasing = TRUE)[4], name, NA))) +
  geom_point() +
  geom_label()

对于您的方法,我认为使用
rank
应该可以很好地工作,例如

ifelse(rank(birth_year) < 10, name, NA))

这是一种更明确的方法。我假设您希望根据您的示例计算每个出生年份的字符数。在这种情况下,我们首先处理排名,然后向原始数据集中添加一列,然后绘制。新的“标签”字段为空/NA或具有顶级集合的成员。我抑制了geom_标签参数中令人讨厌的缺失数据警告

data = starwars %>% filter(mass < 500)

# counts names per birthyear, returns vector of top 4
top4 <- data %>% 
  drop_na(birth_year) %>% 
  count(birth_year, sort = TRUE) %>% 
  top_n(4) %>% 
  pull(birth_year)

# adds column to data with the names from the top 4 birth years
data <- data %>% 
  mutate(label = ifelse(birth_year %in% top4, name, NA))

# plots data with label, dropping NAs
data %>%
  ggplot(aes(x = mass, y = height, label = label)) +
  geom_point() +
  geom_label(na.rm = TRUE)
data=starwars%>%过滤器(质量<500)
#统计每个出生年份的姓名,返回前4名的矢量
前4%
下降(出生年份)%>%
计数(出生年份,排序=真)%>%
排名靠前的(4)%>%
拉力(出生年份)
#将列添加到具有前4个出生年份的姓名的数据中
数据%
变异(标签=ifelse(出生年份%top4,姓名,NA))
#使用标签打印数据,删除NAs
数据%>%
ggplot(aes(x=质量,y=高度,标签=标签))+
几何点()+
geom_标签(na.rm=TRUE)

data = starwars %>% filter(mass < 500)

# counts names per birthyear, returns vector of top 4
top4 <- data %>% 
  drop_na(birth_year) %>% 
  count(birth_year, sort = TRUE) %>% 
  top_n(4) %>% 
  pull(birth_year)

# adds column to data with the names from the top 4 birth years
data <- data %>% 
  mutate(label = ifelse(birth_year %in% top4, name, NA))

# plots data with label, dropping NAs
data %>%
  ggplot(aes(x = mass, y = height, label = label)) +
  geom_point() +
  geom_label(na.rm = TRUE)