【发布时间】:2018-06-14 06:30:34
【问题描述】:
我在选择mutate_at创建的特定变量时遇到问题。
所以我有几个分组比率,我想为这些比率计算某种边界。这可以通过mutate_at 轻松完成。但是我的下一步是使用这些列来计算更多的值,我无法以某种方式自动执行此列选择。有没有方便的方法?
set.seed(1)
df <- data.frame(label=letters[1:25],
group=rep(1:5, each=5),
ratio1=rnorm(25,1,.1),
ratio2=rnorm(25,1,.1))
df2 <-
df %>%
group_by(group) %>%
mutate_at(vars(ratio1, ratio2),
funs(rn1=quantile(., probs=c(0.1587), na.rm=TRUE),
r0=quantile(., probs=c(0.5), na.rm=TRUE),
rp1=quantile(., probs=c(0.8413), na.rm=TRUE)))
这将创建一个数据框,在其中我得到每个比率对应的分位数列(如ratio1_rn1、ratio1_r0 等)。我现在需要使用相关列来计算重要性。我可以像下面这样手动对单个比率执行此操作,但我想再次使用mutate_at 执行此操作,并以某种方式选择正确的_rn1、_r0 和_rp1。
df2 %>%
ungroup() %>%
group_by(label) %>%
mutate(ratio1_z=ifelse(ratio1 >= 0,
(ratio1-ratio1_r0)/(ratio1_rp1-ratio1_r0),
(ratio1-ratio1_r0)/(ratio1_rn1-ratio1_r0)),
ratio1_sigB=.5*pracma::erfc(ratio1_z/sqrt(2)))
【问题讨论】:
-
使用
df %>% group_by(group) %>% mutate_at(vars(ratio1, ratio2), funs(list(quantile(., probs = c(0.1587, 0.5, 0.8413), na.rm = TRUE))))会不会更容易 -
您可能是对的,但数据结构乍一看对我来说似乎很复杂。或者至少我不习惯处理
data.frame中的列表。如果您使用列表方便地敬礼,我也很乐意学习这一点。提前致谢。 -
根据你的代码,我猜你想用各自的分位数为每个对应的“比率”列做比率,因为它是一个除法,可能不需要 group_by 步骤跨度>
-
所以我基本上可以只索引您的意思列表中的每个值?也许我没有关注你,并且
group_by不需要步骤。 -
在最终输出中,您是只寻找
ratio1_sigB列还是其他中间列?