【发布时间】:2018-10-31 18:50:00
【问题描述】:
我的数据框包含图像分析的结果,其中列是图像中存在的特定类的比例,因此示例数据框 class_df 看起来像:
id A B C D E F
1 0.20 0.30 0.10 0.15 0.25 0.00
2 0.05 0.10 0.05 0.30 0.10 0.40
3 0.10 0.10 0.10 0.20 0.20 0.30
这些类中的每一个都属于一个功能组,我想创建新列,其中每个功能组的比例都是从类中计算出来的。映射示例class_fg
class fg
A Z
B Z
C Z
D Y
E Y
F X
所需的结果将是(添加行以显示所需的新列):
id A B C D E F | X Y Z
1 0.20 0.30 0.10 0.15 0.25 0.00 | 0.00 0.40 0.60
2 0.05 0.10 0.05 0.30 0.10 0.40 | 0.40 0.40 0.20
3 0.10 0.10 0.10 0.20 0.20 0.30 | 0.30 0.40 0.30
我可以一次使用一个功能组来完成
first_fg <- class_fg %>%
filter(fg == "Z") %>%
select(class) %>%
unlist()
class_df <- class_df %>%
mutate(Z = rowSums(select(., one_of(first_fg))))
当然有更好的方法来做到这一点,我可以计算每个功能组的行总和,而不必为每个组重复此代码?也许使用 purrr?
【问题讨论】:
-
是的,这称为聚合,然后是汇总。做
class_fg %>% group_by(fg) %>% summarize(...your summary code goes here...) -
抱歉@Ronak,已正确更新。 “标签”应该是“类”
-
@smci - 我不明白这将如何让我为 class_df 创建一个我真正想要总结的摘要?
-
你的代码很混乱,因为你从来没有命名你的 df. (是叫
class_fg还是class_df?什么是class_df?)不管怎样,你想要的解决方案是whatever_your_df_is_actually_called %>% group_by(fg) %>% summarize(...your summary code goes here...) -
我已更新以使示例更清晰。我正在处理一个非常大的数据集,我不确定我是否可以共享(并且在这里使用它作为示例会太大),所以希望改进的示例有所帮助。
标签: r group-by dplyr purrr summarization