如何消除for循环中的最大值以满足特定条件?

如何消除for循环中的最大值以满足特定条件?,r,dplyr,R,Dplyr,我有一个数据框:年龄而不是重复,你可以按性别分组,然后按性别和年龄升序排序。您可以使用cummean函数查找女性平均年龄>=4的点,然后从该点筛选出所有女性记录 年龄% dplyr::mutatecumavage=cummeanage%>% dplyr::过滤器!性别==F& 累计值>=4%>% dplyr::选择CumAvgAge%>% dplyr::总结平均年龄=平均年龄 一个tibble:2x2 性别平均年龄 1楼3楼 2米5 如果您最终想要个人年龄的列表,您可以删除对summary的最后

我有一个数据框:年龄而不是重复,你可以按性别分组,然后按性别和年龄升序排序。您可以使用cummean函数查找女性平均年龄>=4的点,然后从该点筛选出所有女性记录

年龄% dplyr::mutatecumavage=cummeanage%>% dplyr::过滤器!性别==F& 累计值>=4%>% dplyr::选择CumAvgAge%>% dplyr::总结平均年龄=平均年龄 一个tibble:2x2 性别平均年龄 1楼3楼 2米5 如果您最终想要个人年龄的列表,您可以删除对summary的最后一次调用:

df%>% dplyr::按性别分组%>% dplyr::排列性别,年龄%>% dplyr::mutatecumavage=cummeanage%>% dplyr::过滤器!性别==F& 累计值>=4%>% dplyr::选择CumAvgAge 一个tibble:7x2 团体:性别[2] 年龄性别 12楼 2.4楼 3.1米 4.3米 5米 6.7米 7.9米
您可以按性别分组,然后按性别和年龄升序排序,而不是迭代。您可以使用cummean函数查找女性平均年龄>=4的点,然后从该点筛选出所有女性记录

年龄% dplyr::mutatecumavage=cummeanage%>% dplyr::过滤器!性别==F& 累计值>=4%>% dplyr::选择CumAvgAge%>% dplyr::总结平均年龄=平均年龄 一个tibble:2x2 性别平均年龄 1楼3楼 2米5 如果您最终想要个人年龄的列表,您可以删除对summary的最后一次调用:

df%>% dplyr::按性别分组%>% dplyr::排列性别,年龄%>% dplyr::mutatecumavage=cummeanage%>% dplyr::过滤器!性别==F& 累计值>=4%>% dplyr::选择CumAvgAge 一个tibble:7x2 团体:性别[2] 年龄性别 12楼 2.4楼 3.1米 4.3米 5米 6.7米 7.9米 dplyr的一个简单答案是添加一个过滤函数:

library(dplyr)
average <- df %>% group_by(gender) %>% 
     filter((gender == "F" & age <= 4) | gender == "M") %>% 
     summarise(average_age = mean(age))
average
…以及输出:

average
# A tibble: 2 x 2
  gender average_age
  <fct>        <dbl>
1 F                3
2 M                5
> 
dplyr的一个简单答案是添加一个过滤函数:

library(dplyr)
average <- df %>% group_by(gender) %>% 
     filter((gender == "F" & age <= 4) | gender == "M") %>% 
     summarise(average_age = mean(age))
average
…以及输出:

average
# A tibble: 2 x 2
  gender average_age
  <fct>        <dbl>
1 F                3
2 M                5
> 

OP说他们希望平均年龄<4岁。您正在筛选出实际年龄小于4岁的任何人,因此您的平均值将始终小于4岁,但您可能会在平均值仍然小于4岁时错误地删除大于4岁的观察值。例如,如果你有女性c1,1,1,5,你会淘汰5岁的孩子,即使他们都应该留下,因为超龄平均值仍然小于4。@Wil-谢谢你的反馈。这就引出了这样一个问题:为什么要淘汰一些年龄大于4岁的女性,而保留其他女性,并且仍然进行有效的分析,但这超出了OP的范围,人们为什么要这样做来进行分析,原因还不清楚。这只是我快速创建的一个示例,用于转移到另一个关于风速及其特征的问题。。很抱歉没有道理,但这是在rushOP说他们希望平均年龄<4岁时说的。您正在筛选出实际年龄小于4岁的任何人,因此您的平均值将始终小于4岁,但您可能会在平均值仍然小于4岁时错误地删除大于4岁的观察值。例如,如果你有女性c1,1,1,5,你会淘汰5岁的孩子,即使他们都应该留下,因为超龄平均值仍然小于4。@Wil-谢谢你的反馈。这就引出了这样一个问题:为什么要淘汰一些年龄大于4岁的女性,而保留其他女性,并且仍然进行有效的分析,但这超出了OP的范围,人们为什么要这样做来进行分析,原因还不清楚。这只是我快速创建的一个示例,用于转移到另一个关于风速及其特征的问题。。很抱歉说不通,但这是匆忙做的