获取dplyr中的最小值
我想用dplyr编写一个代码,在这里我可以取最小值2 连续行获取dplyr中的最小值,r,dplyr,R,Dplyr,我想用dplyr编写一个代码,在这里我可以取最小值2 连续行 A <- data.frame( y = c("A", "B", "C", "D", "E", "F"), value = c(1, 2, 3, 4, 5, 6)) A # y value # 1 A 1 # 2 B 2 # 3 C 3 # 4 D 4 # 5 E 5 # 6 F 6 我想使用dplyr包 我使用的按名称分组的通用代码是 z <- x %>
A <- data.frame(
y = c("A", "B", "C", "D", "E", "F"),
value = c(1, 2, 3, 4, 5, 6))
A
# y value
# 1 A 1
# 2 B 2
# 3 C 3
# 4 D 4
# 5 E 5
# 6 F 6
我想使用dplyr包
我使用的按名称分组的通用代码是
z <- x %>%
group_by(name)%>%
filter(value == min(value))
z%
分组单位(名称)%>%
过滤器(值==最小值)
我想不出如何在R或dplyr中“编码”连续行您只需要创建一个适当的分组变量:
A %>% mutate(grp = rep(0:(n() - 1) %/% 2 ) %>%
group_by(grp) %>%
slice(which.min(x))
# # A tibble: 3 x 3
# # Groups: grp [3]
# y x grp
# <fct> <dbl> <int>
# 1 A 1 1
# 2 C 3 2
# 3 E 5 3
A%>%突变(grp=rep(0:(n()-1)%/%2)%>%
分组依据(grp)%>%
切片(哪个.min(x))
##tibble:3 x 3
##分组:grp[3]
#y x玻璃钢
#
#一一一一
#2 C 3 2
#3 E 5 3
您只需创建一个适当的分组变量:
A %>% mutate(grp = rep(0:(n() - 1) %/% 2 ) %>%
group_by(grp) %>%
slice(which.min(x))
# # A tibble: 3 x 3
# # Groups: grp [3]
# y x grp
# <fct> <dbl> <int>
# 1 A 1 1
# 2 C 3 2
# 3 E 5 3
A%>%突变(grp=rep(0:(n()-1)%/%2)%>%
分组依据(grp)%>%
切片(哪个.min(x))
##tibble:3 x 3
##分组:grp[3]
#y x玻璃钢
#
#一一一一
#2 C 3 2
#3 E 5 3
稍微不同的tidyverse
可能是:
A %>%
group_by(grp = gl(length(value)/2, 2)) %>%
filter(value == min(value))
y value grp
<fct> <dbl> <fct>
1 A 1. 1
2 C 3. 2
3 E 5. 3
或者使用top\n()
而不是filter()
:
或:
与tidyverse稍有不同的可能性可能是:
A %>%
group_by(grp = gl(length(value)/2, 2)) %>%
filter(value == min(value))
y value grp
<fct> <dbl> <fct>
1 A 1. 1
2 C 3. 2
3 E 5. 3
或者使用top\n()
而不是filter()
:
或:
通过高亮显示代码并单击编辑器中的“代码格式”按钮(
{}
)或将代码缩进4个空格,将代码格式化为代码。通过高亮显示代码并单击编辑器中的“代码格式”按钮({}
)将代码格式化为代码如果原始数据有错误,请解释代码以便我使用,或者另一个选项是A%%>%groupby(y=replace(y,c(FALSE,TRUE),y[c(TRUE,FALSE)])%%>%summary(value=min(value))
在示例数据上一次运行一行以帮助理解。首先,我们创建一个名为grp
的新列,它是连续行的分组列。然后,我们按该列分组。然后,在每个组中,我们切片
与最小x值对应的行。如果需要更多帮助,请将问题编辑为至少包括您得到的错误消息。最好有足够的样本数据来重现错误。我不理解天花板部分。此错误我在slice_impl(.data,dots)中得到错误:求值错误:(list)对象无法强制键入“double”。代码工作正常,直到%>%变异(grp=rep(1:天花板(n()/2),each=2))%%>%grp%%>%grp%%但当我尝试对其进行切片时给出错误在原始数据上给出错误,请您解释代码以便我使用,或者另一个选项是A%%>%group by(y=replace(y,c(FALSE,TRUE),y[c(TRUE,FALSE)])%%>%summary(value=min(value))
在示例数据上一次运行一行以帮助理解。首先,我们创建一个名为grp
的新列,它是连续行的分组列。然后,我们按该列分组。然后,在每个组中,我们切片
与最小x值对应的行。如果需要更多帮助,请将问题编辑为至少包括您得到的错误消息。最好有足够的样本数据来重现错误。我不理解天花板部分。此错误我在slice_impl(.data,dots)中得到错误:求值错误:(list)对象无法强制键入“double”。代码工作正常,直到%>%变异(grp=rep(1:天花板(n()/2),each=2))%%>%groupby(grp)%%>%但是当我尝试切片它时,会给errorNice多样性!我想你需要像gl(天花板(n()/2),2,length=n())
这样的东西来让gl
处理奇数行。这也值得指出细微的区别:filter(value==min(value))
将保留所有行的最小值,如果有联系。top\u n
类似于slice
,因为它将始终是每组1行。@Gregor感谢您的评论。是的,对于奇数,可以使用您建议的值。种类繁多!我想您需要类似gl(天花板(n()/2),2,长度=n()的值
用于gl
处理奇数行。还需要指出细微的区别:filter(value==min(value))
将保留所有行的最小值(如果有关系)。top\n
类似于slice
,因为它将始终是每组1行。@Gregor感谢您的评论。是的,对于奇数,可以使用您建议的值。
A %>%
group_by(grp = gl(length(value)/2, 2)) %>%
top_n(-1, wt = value)
A %>%
group_by(grp = (row_number()-1) %/% 2) %>%
top_n(-1, wt = value)