我有一个类似于以下示例的数据集,其中三个因子基本上是区组变量(Z,A和B),一个描述治疗的因子(X)和一个数字响应(Y)。在Z,A和B的每个组合中,我想计算X的每个水平与参考水平(X==“a”)相比的Y比率。
df<-data.frame(expand.grid(Z=c("Left","Right","Centre"),A=c("Yesterday","Tomorrow"),B=c("Rep1","Rep2"),X=c("a","b","c")))
set.seed(83)
df$Y<-sample(1:10,nrow(df),replace=T)
这个dplyr代码似乎可以实现:
ratios <- df %>%
group_by(Z,A,B) %>%
reframe(ratio = Y/Y[X=="a"])
ratios
然而,我真的希望在那里有另一列,告诉我这个比率与X的哪个水平相关联,我不知道如何得到这个。
或者输出是否忠实于原始 Dataframe 的行顺序?(即使存在NA?)
(我试图用一个更大的数据集来做这件事,但有些东西不起作用-要么是行顺序发生了变化,要么是group_by的某些东西不起作用。令人恼火的是,我似乎无法用一个小的示例数据集来重现错误...)
1条答案
按热度按时间uurv41yg1#
你能描述一下你得到的错误吗?你可以做的第一个观察是,你的输出与原始 Dataframe 的行数完全一样,因为在这种情况下,你的
reframe()
相当于mutate()
+排序。使用mutate()
,你会自动保留X
行: