【发布时间】:2021-08-21 04:54:43
【问题描述】:
我有一个如下所示的数据框:
data <- data.frame(id=c(1,2,6,3,7,1,5,7),
class=c('apple','boy','boy','apple','boy','apple','apple','boy'),
type=c('type1','type1','type2','type2','type3','type4','type4','type4'),
col1=c(-0.9,0.8,0.7,-0.6,-0.5,0.4,0.3,0.9), col2=c(-6.9,2.8,0.4,-1.6,-0.8,0.6,0.2,-0.1),
col3=c(6.7,0.9,0.2,-0.7,-0.8,1.6,3.2,0.1))
id class type col1 col2 col3
1 apple type1 -0.9 -6.9 6.7
2 boy type1 0.8 2.8 0.9
6 boy type2 0.7 0.4 0.2
3 apple type2 -0.6 -1.6 -0.7
7 boy type3 -0.5 -0.8 -0.8
1 apple type4 0.4 0.6 1.6
5 apple type4 0.3 0.2 3.2
7 boy type4 0.9 -0.1 0.1
我正在尝试创建一个具有相同列(即 col1、col2、col3、...)的数据框,但其中的值应该是 median((data %>% filter(class=="apple"))$col1) - median((data %>% filter(class=="boy"))$col1),对于每列的每个 type,依此类推。
所以,最终的数据框看起来像
type col1 col2 col3
type1 -0.1 -4.1 3.7
type2 0.7 0.4 0.2
type3 -0.5 -0.8 -0.8
type4 0.4 0.6 1.6
我可以通过为每个 type 创建单独的数据框并计算两个类的中位数的差异并将向量附加到带有 bind_rows() 的空数据框来做到这一点。
但是有没有更好更简单的方法来做到这一点?
【问题讨论】:
-
您的示例代码(在段落中)有太多引号。如果我的回答不正确,那么请(a)修复您的代码错误,当语法 in the question 甚至无法解析时,可能很难解决编码问题/问题; (2) 扩展您的样本数据,以便您在每组中拥有多个观察值,因为单个数据的中位数相当无趣(并且与其本身的差异......不太那么:-)。
-
@kalki:请检查:
median((data %>% filter(class==""boy"))$col1) - median((data %>% filter(class==""boy"))$col1)。这个对吗。给 0 -
@TarJae,我也看到了,可能是因为每组只有一个
"boy",单个基准面的中位数就是基准面本身,然后从自身减去...就是@987654329 @. -
@r2evans 感谢您指出错字。我已经编辑了帖子以修复它
-
哦,是的,这是总结逻辑的一个重大变化。