【发布时间】:2016-09-07 12:05:34
【问题描述】:
您好,我有一系列网站的淡水鱼数据集,多年来每月重复访问。每行都有发现的物种、总数和状态(即测试结果的阳性或阴性)。
sample_ID site coll_date species TOT inf_status
382870 site 1 27/10/2007 Species B 1 positive
382872 site 2 27/10/2007 Species D 1 positive
487405 site 3 28/10/2007 Species A 1 positive
487405 site 3 28/10/2007 Species A 1 positive
382899 site 4 03/11/2007 Species A 1 positive
382900 site 5 03/11/2007 Species A 1 positive
382901 site 5 03/11/2007 Species A 1 positive
382902 site 6 03/11/2007 Species A 1 positive
382903 site 7 09/12/2007 Species B 1 positive
382904 site 8 05/02/2008 Species C 9 negative
382905 site 8 05/02/2008 Species A 13 negative
382906 site 9 14/02/2008 Species A 1 positive
382907 site 9 14/02/2008 Species A 1 positive
我需要重新格式化数据,以便每次站点访问只有一行(即在给定站点名称和日期组合中),其中包含按物种和鱼类状态(即物种A_pos、SpeciesA_neg、Sp_B_pos.. ETC)。
site coll_date SP_A_pos SP_A_neg SP_B_pos SP_B_neg SP_C_pos SP_C_neg SP_D_pos SP_D_neg
site 1 27/10/2007 0 0 1 0 0 0 0 0
site 2 27/10/2007 0 0 0 0 0 0 1 0
site 3 28/10/2007 3 0 0 0 0 0 0 0
site 4 03/11/2007 1 0 0 0 0 0 0 0
site 5 03/11/2007 2 0 0 0 0 0 0 0
site 6 03/11/2007 1 0 0 0 0 0 0 0
site 7 09/12/2007 0 0 1 0 0 0 0 0
site 8 05/02/2008 0 13 0 0 0 9 0 0
site 9 14/02/2008 2 0 0 0 0 0 0 0
我想我可以使用 reshape 函数,但仍然需要在站点访问中求和,因为 reshape 将占据第一行。我的想法是使用 split/apply/aggregate/for 循环等,但尝试了各种组合但没有得到任何结果。抱歉,我对 R 不熟悉。感谢任何 cmets!
【问题讨论】:
-
我猜你需要
dcast即library(reshape2);dcast(df1, site+coll_date~species + inf_status, length) -
哇,谢谢 Akrun,这是一个优雅的解决方案。并道歉,我没有意识到这是一个重复的问题
-
@akrun 这不适用于计数大于 1 的行,例如对于站点 8 – 总数为 9,但上面的脚本返回 1。有什么想法吗?
-
我重新打开了帖子。