【发布时间】:2020-09-27 18:58:48
【问题描述】:
我创建了一个算法来获取子集列表的摘要。
这是我的数据框:
df <- data.frame(
Name = c("asdf", "kjhgf", "cvbnm", "rtyui", "cvbnm", "jhfd", "cvbnm", "sdfghj", "cvbnm", "dfghj", "cvbnm"),
sale = c(27,NA, 27, 16, 14,NA, 14, 14,NA, 18, 28),
city = c("CA", "TX", "MN", "NY", "TX", "MT", "HU", "KL", "TX", "SA", "TX"),
Dept = c("HH", "MM", "NN", "MM", "AA", "VV", "MM", "HU", "JJ", "MM", "ZZ")
)
现在我根据要求创建了一些子集:
df1<- df
df$cc1<-1
#Astellas
df2<- subset(df, Dept == 'MM')
df$cc2<-ifelse(df$Dept == 'MM',1,NA)
lst<-list(df$cc1, df$cc2)
ldat<-list("ALL" = df1, "MM" =df2)
使用下面的算法,我可以获得所需的摘要输出,但我想创建一个功能相同的函数。请帮助了解如何创建自定义函数以获得与以下脚本相同的结果。
df %>%
select(-Name, -city) %>%
group_by(Dept) -> dat
N <- length(dat[[1]])
Median <- median(dat[[1]])
Average <- mean(dat[[1]])
q25 <- quantile(dat[[1]])[2]
q75 <- quantile(dat[[1]])[4]
cbind(q25, Median, Average, q75, N) -> ALL
dat %>% filter(Dept == "MM") -> MM
N <- length(MM[[1]])
Median <- median(MM[[1]])
Average <- mean(MM[[1]])
q25 <- quantile(MM[[1]])[2]
q75 <- quantile(MM[[1]])[4]
cbind(q25, Median, Average, q75, N) -> MM
as.data.frame(rbind(ALL, MM)) %>%
`rownames<-`(., c("ALL", "MM")) %>%
pander::pander() %>% as.data.frame()
我需要把上面的脚本转换成这样的函数:
functiont(data=ldat,var = "sale", name_of_var = c("ALL","MM"))
对于变量列表,函数应该是动态的。在这种情况下,我们有两个变量c("ALL" ,"MM")。所以这应该是动态的。
输出摘要应该是这样的flextable:
【问题讨论】: