• R语言
  • 如何比较两个不相等的数据框数值

根据另一个数据框的内容来除去原数据框的一些数据

<br />
> dat1 <- data.frame(M=c("mt1","mt1","mt1","mt2","mt2","mt2"),N=c("2","3","5","7","9","9"))<br />
> dat2 <- data.frame(M=c("mt1","mt2"),M-se=c(1.8,8),M+se=c(4.8,9))<br />
> dat1<br />
    M N<br />
1 mt1 2<br />
2 mt1 3<br />
3 mt1 5<br />
4 mt2 7<br />
5 mt2 9<br />
6 mt2 9<br />
> dat2<br />
    M sd1 sd2<br />
1 mt1 1.8 4.8<br />
2 mt2 8.0 9.0</p>
<p>#我想按照mt1的N值对应dat2中mt1的sd1和sd2值,#<br />
#筛选出满足sd1<N<sd2的dat1行,#<br />
#结果应为#</p>
<p>> datnew<br />
    M N<br />
1 mt1 2<br />
2 mt1 3<br />
5 mt2 9<br />
6 mt2 9<br />
</p>

#我想按照mt1的N值对应dat2中mt1的sd1和sd2值,#

#筛选出满足sd1<N<sd2的dat1行,#

#结果应为#

不知道为什么“sd1<N<sd2的dat1”在代码框中显示不出来,又复制出来~~~

为什么这样做的原因是:按照[μ﹢3σ,μ-3σ]的范围筛选出源数据中的异常值~~~

如果有更方便的方法和函数,希望大家能多出点主意~~~

我的想法是

<br />
> dat12 <- merge(dat1,dat2)<br />
> dat12<br />
    M N sd1 sd2<br />
1 mt1 2 1.8 4.8<br />
2 mt1 3 1.8 4.8<br />
3 mt1 5 1.8 4.8<br />
4 mt2 7 8.0 9.0<br />
5 mt2 9 8.0 9.0<br />
6 mt2 9 8.0 9.0<br />
#这里出现了错误<br />
> dat12[(dat12$N>datp$sd1)&(dat12$N<datp$sd2),]<br />


谢谢大家~~~[s:18]
</p>