【发布时间】:2023-01-10 23:45:03
【问题描述】:
我是 r 的新手,主要与 dataframes 一起工作。一个常见的任务是normalize计算来自多个数据帧的多个参数。我有一个演示数据集:数据集
| Season | Product | Quality | Sales |
|---|---|---|---|
| Winter | Apple | bad | 345 |
| Winter | Apple | good | 13 |
| Winter | Potato | bad | 23 |
| Winter | Potato | good | 66 |
| Winter | Beer | bad | 345 |
| Winter | Beer | good | 34 |
| Summer | Apple | bad | 88 |
| Summer | Apple | good | 90 |
| Summer | Potato | bad | 123 |
| Summer | Potato | good | 457 |
| Summer | Beer | bad | 44 |
| Summer | Beer | good | 546 |
我想做的是为“Sales”添加一列“FC”([tag:fold change])。必须根据“质量”为每个“季节”和“产品”计算 FC。“坏”是底线。
期望的结果:
| Season | Product | Quality | Sales | FC |
|---|---|---|---|---|
| Winter | Apple | bad | 345 | 1.00 |
| Winter | Apple | good | 13 | 0.04 |
| Winter | Potato | bad | 23 | 1.00 |
| Winter | Potato | good | 66 | 2.87 |
| Winter | Beer | bad | 345 | 1.00 |
| Winter | Beer | good | 34 | 0.10 |
| Summer | Apple | bad | 88 | 1.00 |
| Summer | Apple | good | 90 | 1.02 |
| Summer | Potato | bad | 123 | 1.00 |
| Summer | Potato | good | 457 | 3.72 |
| Summer | Beer | bad | 44 | 1.00 |
| Summer | Beer | good | 546 | 12.41 |
一种方法是先通过“季节”filterfilter,然后通过“产品”(例如创建子集数据框subset_winter_apple) 然后像这样计算 FC:subset_winter_apple$FC = subset_winter_apple$Sales / subset_winter_apple$Sales[1]。稍后,我可以再次组合所有子集数据帧,例如使用绑定用 FC 列重构原始数据框。然而,这是非常低效的。所以我想到了splitting 数据框并创建了一个list:拆分(数据集,列表(数据集$Season,数据集$Product)).
但是,现在我在规范化(FC 计算)上苦苦挣扎,因为我不知道如何引用特定的第一个单元格值中的“销售”数据框列表这样每个列出的数据框中该列中的每个值都被单独标准化。我确实设法计算了列表的 FC 值,但是,它是每个列出的数据框中与第一个使用 lappy 的精确副本:
lapply(数据集,函数(DF){DF$FC = 数据集[[1]]$Sales/数据集[[1]]$Sales[1];DF})
显然,我不知道如何引用特定列中的第一个单元格以规范化每个列出的数据框的整个列.有人能帮帮我吗?
非常感谢您的建议。
【问题讨论】:
-
请使用
dput(例如dput(yourdata))发布您的数据,以便我们使用它们并提供解决方案。
标签: r dataframe normalize filter split list lappy r list dataframe lapply normalization