搜索
查看: 370|回复: 4

使用变量替换summarise中tibble列名,如何写?

[复制链接]

106

主题

128

帖子

987

积分

高级会员

Rank: 4

积分
987
发表于 2018-2-7 23:13:26 | 显示全部楼层 |阅读模式

# 使用变量替换summarise中tibble列名,如何写?

# 这是一个按数据框中分组求各组最大值的方法

library(dplyr)

x=data.frame(
  group=c("A","A","A","B","B","B"),
  richness=c(1,3,5,2,4,6)
)

opts = list(type="richness")

y = x%>% group_by(group)%>% summarise(Max=max(richness))
y
# 但我想用命令行传递来的opts$type来替换最后的richness列,即实现可以随意计算不同的列,如何操作

# 尝试1. opts$type直接替换richness,结果最大值列全为字符richness
y = x%>% group_by(group)%>% summarise(Max=max(opts$type))
y
# 尝试2:richness替换为x[[opts$type]]无效,
y = x%>% group_by(group)%>% summarise(Max=max(x[[opts$type]]))
y
# 以上我想的方法都无效,谁知道该怎么写。谢谢!




上一篇:使用ggplot2绘制聚类热图
下一篇:问一个大家bam文件修改HI标签的问题
回复

使用道具 举报

2

主题

34

帖子

707

积分

高级会员

Rank: 4

积分
707
发表于 2018-2-8 00:28:35 | 显示全部楼层
本帖最后由 x2yline 于 2018-2-8 07:19 编辑

可以参考这里:
https://www.r-bloggers.com/dynam ... aluation-functions/
在函数后面加上“_”,使用.dot配合setNames()实现

[Ruby] 纯文本查看 复制代码
rm(list=ls())
library(dplyr)

x=data.frame(
  group=c("A","A","A","B","B","B"),
  richness=c(1,3,5,2,4,6)
)

opts = list(type="richness")
x%>% group_by(group)%>% summarise(Max=max(richness))
## # A tibble: 2 x 2
##   group   Max
##   <fct> <dbl>
## 1 A      5.00
## 2 B      6.00

x%>% group_by(group)%>% summarise_(
  .dots=setNames(paste0("max(", opts$type, ")"),  "Max")
  )
## # A tibble: 2 x 2
##   group   Max
##   <fct> <dbl>
## 1 A      5.00
## 2 B      6.00
回复 支持 反对

使用道具 举报

106

主题

128

帖子

987

积分

高级会员

Rank: 4

积分
987
 楼主| 发表于 2018-2-8 09:22:09 | 显示全部楼层
x2yline 发表于 2018-2-8 00:28
可以参考这里:
https://www.r-bloggers.com/dynamic-columnvariable-names-with-dplyr-using-standard-eva ...

谢谢! 果然有效。

一共收到三种写法:

# 群友 林德春-华大-病原学-信息分析 回答可行,用paste把变量转换为文本
y = x %>% group_by(group)%>% summarise_(Max=paste('max(',opts$type,')',sep=""))
y

# 技能树x2yline提供方法
x%>% group_by(group)%>% summarise_(
  .dots=setNames(paste0("max(", opts$type, ")"),  "Max")
)

# 提供另一种思路,新加坡-李陈浩 回答

y = x%>% group_by(group)%>%
  summarise_at(opts$type,c(Max=max))
y
回复 支持 反对

使用道具 举报

106

主题

128

帖子

987

积分

高级会员

Rank: 4

积分
987
 楼主| 发表于 2018-2-14 09:14:11 | 显示全部楼层
问题要描述清楚,和自己的尝试都写清,在群里发很容易有人回答。自己都不花时间组织语言逻辑,别人不容易看懂,更不会回答。
回复 支持 反对

使用道具 举报

0

主题

7

帖子

93

积分

注册会员

Rank: 2

积分
93
发表于 2018-2-14 13:23:34 | 显示全部楼层
赞一个,又学到了一种分组计算的方法,谢谢。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2018-5-21 05:41 , Processed in 0.091127 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.