我想创建一个函数来从数据框加入置信区间的下限和上限(名为CIlow
和CIhigh
)。请参阅下面的数据框作为示例。
dataframe<-data.frame(CIlow_a=c(1.1,1.2),CIlow_b=c(2.1,2.2),CIlow_c=c(3.1,3.2),
CIhigh_a=c(1.3,1.4),CIhigh_b=c(2.3,2.4),CIhigh_c=c(3.3,3.4))
对于许多组(名为CIlow
,CIhigh
和a
)以及许多变量,数据框都有b
和c
(在这种情况下,两个,数据帧的行)。
group<-c("a","b","c")
为了构建我自己的函数,我尝试了以下代码:
f<-function(df,gr){
enquo_df<-enquo(df)
enquo_gr<-enquo(gr)
r<-df%>%
dplyr::mutate(UQ(paste("CI",enquo_gr,sep="_")):=
sprintf("(%s,%s)",
paste("CIlow",quo_name(enquo_gr),sep="_"),
paste("CIhigh",quo_name(enquo_gr),sep="_")))
return(r)
}
但是在使用功能时
library(dplyr)
group<-c("a","b","c")
dataframe<-data.frame(CIlow_a=c(1.1,1.2),CIlow_b=c(2.1,2.2),CIlow_c=c(3.1,3.2),CIhigh_a=c(1.3,1.4),CIhigh_b=c(2.3,2.4),CIhigh_c=c(3.3,3.4))
f(df=dataframe,gr=group)
我没有得到预期的输出
output<-data.frame(CI_a=c("(1.1,1.3)","(1.2,1.4)"),
CI_b=c("(2.1,2.3)","(2.2,2.4)"),
CI_c=c("(3.1,3.3)","(3.2,3.4)"))
但是出现以下错误消息:
你知道为什么吗?我怎么能解决这个问题?提前谢谢。错误:LHS必须是名称或字符串
答案 0 :(得分:2)
老派解决方案:
res <- as.data.frame(matrix(NA_character_, nrow(dataframe), ncol(dataframe) / 2))
for (i in seq_along(group)) {
var <- paste0("CI", c("low", "high"), "_", group[[i]])
res[[i]] <- sprintf("(%s,%s)", dataframe[[var[[1]]]], dataframe[[var[[2]]]])
}
names(res) <- paste0("CI_", group)