我有以下代码,我想在名为ccc的数据框中运行多个列。
ccc %>%
group_by(LA) %>%
summarise(Def = sum(DefaultOct05 == 'Def'),
NDef = sum(DefaultOct05 != 'Def'),
DRate = mean(DefaultOct05 == 'Def'))
LA是其中一个专栏的名称。如何设置循环以运行多个不同的列?
我尝试了以下内容。
for (i in 26:ncol(ccc)) {
ccc %>%
group_by(i) %>%
summarise(Def = sum(DefaultOct05 == 'Def'),
NDef = sum(DefaultOct05 != 'Def'),
DRate = mean(DefaultOct05 == 'Def'))
}
但是我收到以下错误消息。
resolve_vars(new_groups,tbl_vars(.data))出错: 未知变量分组依据:i
答案 0 :(得分:0)
大多数人会在您的问题中遗漏的是可重现的数据集。没有它,通常很难重现你的问题并解决它。
如果我说得对,你的数据集如上所示:
set.seed(1)
ccc=data.frame(Default=sample(c(0,1),100,replace = TRUE),LA=sample(c("X","Y","Z"),100,replace = TRUE),DC=sample(c("A","B","C"),100,replace = TRUE))
do.call() - 将rbind()应用于后续元素。 lapply(dat,function(x))将函数应用于dat的每个元素 - 在我们的case列中。
library(dplyr)
do.call(rbind,lapply(ccc, function(Var) {
dat=data.frame(Var,Default=ccc$Default) %>% group_by(Var) %>% summarise(Def=sum(Default),NDef=n()-sum(Default),DRate=mean(Default))
return(as.data.frame(dat))
}
))
答案 1 :(得分:0)
“LA是其中一个列的名称”
实际上,按dplyr构造分组可以处理列内的变量。我想你想做其他事情。
如果要将相同的功能应用于不同的列,可以使用summarize_at。
df <- data.frame( id = c(1:20),
a1 = runif(20),
b1 = runif(20),
c1 = runif(20)
)
library(dplyr)
df %>% summarise_at(c("a1","b1","c1"), funs(med = median,
avr = mean))
# result:
# a1_med b1_med c1_med a1_avr b1_avr c1_avr
# 1 0.6444056 0.5266252 0.6420554 0.5605837 0.4983654 0.5546381