如何从数据子集中删除tapply函数结果中的NA

时间:2016-03-24 08:06:22

标签: r na

我有一个数据集,包含列中的几个变量和16个组(为了简化它,我说,我有8个组)用于不同的土壤和横断面。我希望用每组的平均值制作条形图。但是P_ero和P_upsl,以及ZT_ero和ZT_upls等应该在图表旁边显示。 我的数据(df)看起来像:(不同土壤的碳和氮含量(例如P-Plowing,ZT-zero耕作))。

name    N_cont  C_cont  group
P_ero   1,064   8,380   1
P_ero   0,961   8,086   1
P_ero   0,977   8,331   1
ZT_ero  1,767   17,443  2
ZT_ero  1,802   18,264  2
ZT_ero  2,083   20,112  2
Ms_ero  1,547   14,380  3
Ms_ero  1,566   15,313  3
Ms_ero  1,505   14,760  3
Md_ero  1,512   14,303  4
Md_ero  1,656   15,331  4
Md_ero  1,500   13,788  4
P_upsl  1,121   10,581  5
P_upsl  1,159   10,460  5
P_upsl  1,223   10,171  5
ZT_upsl 1,962   20,656  6
ZT_upsl 1,784   16,780  6
ZT_upsl 1,720   17,482  6
Ms_upsl 1,578   16,228  7
Ms_upsl 1,634   15,331  7
Ms_upsl 1,394   13,419  7
Md_upsl 1,286   11,824  8
Md_upsl 1,241   11,452  8
Md_upsl 1,317   11,932  8

我为每个土壤制作了数据子集,例如(用于耕作):

P<-df[grepl("(P)", df$group), ]; P

然后是碳含量的手段

tapply(X=P$C_cont,INDEX = P$name,FUN = mean,na.rm=TRUE)

我实际上只是希望在“名称”列中使用“P”的组的方法,但结果我得到所有其他具有NA的组:

   P_ero    ZT_ero    Ms_ero    Md_ero    P_upsl   ZT_upsl 
  8.265667      NA        NA        NA 10.404000        NA 
  Ms_upsl   Md_upsl   
      NA         NA       

所以我不能用NA制作条形图。 有谁知道,这可能有用吗?

2 个答案:

答案 0 :(得分:2)

您可以将tapply分配给某个值,例如x,然后x[!is.na(x)]完成工作。

答案 1 :(得分:0)

尝试:

df$name <- as.character(df$name)
P<-df[grepl("(P)", df$group), ]; P
tapply(X=P$C_cont,INDEX = P$name,FUN = mean,na.rm=TRUE)

我猜您的df$namevector factor。但如果没有实际数据,很难进行测试。