【发布时间】:2014-08-01 03:15:14
【问题描述】:
这是我几天前提出的题为“为 20 次重复和 2 次处理中的列的最小值设置数据框的子集”的问题的扩展,该问题涉及相同的数据集,但数据框略有不同。我的数据框df 有五列(朱利安日期、治疗、细胞、花朵、死亡)。有20个重复细胞接受2次处理,并在多个日期记录了花和死花。
例子df:
'juliandate' 'cell' 'treatment' 'flowers' 'dead'
260 1 1 5 0
265 1 1 8 2
270 1 1 1 5
260 1 2 1 0
265 1 2 10 2
270 1 2 0 8
260 2 1 3 0
265 2 1 9 5
270 2 1 2 12
260 2 2 2 1
265 2 2 6 2
270 2 2 3 6
我正在使用以下代码获取对应于 2 次处理中每个单元格的最大死花数量的朱利安日期,当多个日期对于给定的死花数量相同时,选择较晚的朱利安日期细胞和治疗
df[, list(dead=max(dead), julian=max(julian[dead==max(dead)])), by=list(cell.id, treat)]
返回:
'juliandate' 'cell' 'treatment' 'dead'
270 1 1 5
270 1 2 8
270 2 1 12
270 2 2 6
这将返回我正在寻找的内容,但我还想返回与这个新子集对应的花列中的值。
例如:
'juliandate' 'cell' 'treatment' 'flowers 'dead'
270 1 1 1 5
270 1 2 0 8
270 2 1 2 12
270 2 2 3 6
有没有一种很好的干净方法来做到这一点,而无需创建多个子集并将它们重新合并在一起?提前致谢。
【问题讨论】:
-
您确定这是
data.frame而不是data.table?您使用的语法看起来不像可以与data.frame一起使用的语法。它们是完全不同的对象。 -
是的@MrFlick,你是对的。此示例使用
data.table。我的错。感谢澄清 -
@user3874999。我以为您要求提供 data.table 解决方案。
-
是的@akrun,我正在寻找一个 data.table 答案,因为这是我更熟悉的。但是,当我检查原始数据时,您的前两个产品返回的数字不正确。您的第三个建议似乎是正确的。我真的很感激帮助。我无法立即看出为什么您的前两个建议不起作用。
-
@user3874999,我看不出任何变体有什么问题。您是否在 this 示例数据上对其进行了测试?如果没有,您的数据集中是否有 NA?
标签: r