首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用dplyr::修改和粘贴用户定义函数的两个现有变量创建一个新变量

使用dplyr::修改和粘贴用户定义函数的两个现有变量创建一个新变量
EN

Stack Overflow用户
提问于 2017-07-09 11:40:22
回答 1查看 860关注 0票数 0

我想要创建一个函数,从数据帧加入置信区间的下限和上限(称为CIlowCIhigh)。作为示例,请参阅下面的数据框架。

代码语言:javascript
运行
复制
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))

数据框架为多个组(称为CIlowbc)和多个变量(在本例中为数据帧的行)提供了aCIhigh

代码语言:javascript
运行
复制
group<-c("a","b","c")

为了构建自己的函数,我尝试了以下代码:

代码语言:javascript
运行
复制
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)
}

但是,当使用该函数时

代码语言:javascript
运行
复制
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)

我没有得到预期的输出

代码语言:javascript
运行
复制
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必须是名称或字符串。

你知道为什么吗?我怎样才能解决这个问题?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-07-09 13:06:54

老派解决方案:

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44995997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档