r - R: 如何在 group_by 之后使用 group_map 运行自定义函数?
问题描述
鉴于此,我有一个数据框如下:
dt <- data.frame(year = sample(c(2000:2019),100,replace = T ),
month = sample(c(1:12),100,replace = T ),
paitent_ID = sample(c(1:50),100,replace = T ),
state = sample(c(1:10),100,replace = T ) )
我需要在排序group by
后将以下函数应用于此数据集:
newState <- function(dt){
dt["new"]= dt[0,"state"]*3
dt
}
因此,该函数应该为new
每个组添加一个名为的新列。
这是group_by:
library(dplyr)
dt %>%
group_by(paitent_ID) %>%
group_map( ~ .x %>%
arrange( year,month)) %>%
group_map( ~ .x %>%
newState())
当我运行代码时,它抱怨:
Error in UseMethod("group_split") :
no applicable method for 'group_split' applied to an object of class "list"
解决方案
正如@André Oliveira 在评论中提到的,建议mutate
用于添加列。但是,可以group_modify
在对函数进行一些小的更改后这样做。
newState <- function(dt, groupvars){
dt["new"]= dt[1,"state"]*3
dt
}
dt %>%
group_by(paitent_ID) %>%
arrange(year, month) %>%
group_modify(newState) %>%
ungroup
# # A tibble: 100 x 5
# paitent_ID year month state new
# <int> <int> <int> <int> <dbl>
# 1 1 2006 5 3 9
# 2 2 2012 12 3 9
# 3 3 2013 11 8 24
# 4 3 2014 10 1 24
# 5 3 2019 5 6 24
# 6 4 2006 7 5 15
# 7 4 2006 7 2 15
# 8 5 2003 8 8 24
# 9 7 2015 12 2 6
# 10 7 2017 8 10 6
还有一种更传统的方法
dt %>%
group_by(paitent_ID) %>%
arrange(year, month) %>%
mutate(new = state[1]*3)
推荐阅读
- python - os.system重定向python代码不起作用
- android - 根据颤动的屏幕尺寸调整类的大小
- javascript - Firebase - Vue 数据库集成不起作用
- javascript - 如何使 div 在 css 网格中占据相等的空间?
- php - 未定义函数 sqlsrv_connect() 即使在安装扩展和 odbc 驱动程序之后
- artifactory - Artifactory 的“允许内容浏览”功能是否更改或被禁用?
- c++ - glReadPixels 导致崩溃
- python - django get_object() 被多次调用
- ios - 如何在 NSnumberFormatter 中显示“$”而不是“US$”?
- javascript - Slick Slider 在网站上不起作用?