首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从数据子集中删除tapply函数结果中的NAs

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

Stack Overflow用户
提问于 2016-03-24 16:06:22
回答 2查看 1.2K关注 0票数 0

我有一个数据集,其中包含多个变量的列和16组(为了简化,我会说,我有8组)不同的土壤和横断面。我希望用每一组的均值来制作barplot。但是P_ero和P_upsl,以及ZT_ero和ZT_upls等等都应该显示在图的旁边。我的数据(df)是这样的:(不同土壤(如P翻、ZT免耕)的碳和氮含量)。

代码语言:javascript
复制
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

我为每种土壤制作了数据的子集,就像这样(用于耕作):

代码语言:javascript
复制
P<-df[grepl("(P)", df$group), ]; P

然后是碳含量的方法

代码语言:javascript
复制
tapply(X=P$C_cont,INDEX = P$name,FUN = mean,na.rm=TRUE)

我实际上只想要在"name“列中带有"P”的组的均值,但结果是我得到了所有其他带有NAs的组:

代码语言:javascript
复制
   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       

所以我不能用NAs做柱状图。有人知道这是怎么回事吗?

EN

回答 2

Stack Overflow用户

发布于 2016-03-24 16:58:07

你可以给你的tapply赋值,比方说x,然后x[!is.na(x)]来做这项工作。

票数 2
EN

Stack Overflow用户

发布于 2016-03-24 16:41:29

尝试:

代码语言:javascript
复制
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$namefactorvector。但没有实际数据很难进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36195588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档