2017-08-23 93 views
0

这是我的数据的一个小样本的值:滤波基于在R数据帧

data table

顶行包括表示不同树种(例如PJ =叶松)码。数值表示调查地块内每种物种的数量。每个案例代表一个由森林经理(B)评估一次的立场,然后由管理机构(A)进行基于情节的调查进行审计。我想在R中使用chisq.test来确定两个样本来自同一群体的概率,基本上将来源A的结果与来自源B的结果进行比较。对于每种情况,我想将0值转换为NA A和B源都有0。否则,我会不必要地夸大测试的自由度。我对R很陌生。

我想在许多情况下进行卡方检验,整个数据集最多包含15个物种。在大多数情况下,有2-7个物种需要处理。

感谢您的帮助

+2

执行这些类型操作的两种方法:使用'?reshape'转换为宽数据集并比较'PJ.A'和'PJ.B'。或者分别为'source =='A''和'B'使用'subset',创建逻辑:PJ0a和PJ0b并将两对一合并回合并关键'case'上的原始数据集。 – AdamO

+0

请使用'dput()'或'dput(head())'而不是使用数据的图片。 – Aramis7d

+0

好吧,我会尽力在将来 –

回答

0

可以使用tidyverse功能,你可以试试:

df %>% 
group_by(Case) %>% 
mutate(PJ = if_else(sum(PJ) == 0, NA, PJ)) 

这是什么做的是,如果这一措施是0两个Source,总和为0,那么你将这个值替换为NA。它消除了将数据转换为宽格式的需要。

此外,可能同时看mutate_atmutate多列。

+0

该代码会引发错误。 mutate_impl(.data,dots)中的错误: 评估错误:'false'必须是长度为1('condition'的长度),而不是2。 –

+0

无法在没有数据的情况下进行调试。请编辑该问题以提供可重复的示例。 – Aramis7d