2016-03-24 33 views
0

Farklı topraklar için sütunlarda ve 16 grupta (basitleştirmek için 8 tane grubum var) birkaç değişken içeren bir veri kümem var ve transekt. Her grubun ortalaması ile barplot yapmak istiyorum. Ancak P_ero ve P_upsl, ZT_ero ve ZT_upls ve benzeri grafikte yanında gösterilmelidir. Verilerim (df) şu şekildedir: (farklı topraklar için karbon ve azot içeriği (örn. P-Plowing, ZT-zero toprak işleme)). Karbon içeriğininBir veri alt kümesinden bir tapply işlevinin sonuçlarındaki NA'lar nasıl kaldırılır

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

ve daha sonra aracı

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

Aslında sadece istiyorum:

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 

I (sürmek için) gibi, her bir toprak veri alt kümeleri yapılmıştır "name" sütununda "P" olan grupların anlamı, ancak sonuç olarak NA'larla diğer tüm grupları elde ederim:

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  

Bu yüzden NA'larla barplots yapamıyorum. Herkes biliyor mu, bu nasıl işe yarayabilir?

+1

Bu, kullanılmayan faktör seviyelerini düşürmelidir: 'tapply (X = P $ C_cont, INDEX = faktör (P $ adı), FUN = ortalama, na.rm = DOĞRU)' – beetroot

+0

faktörü (P $ isim) çalışır. FYI: grepl'deki df $ grubu df $ adı olmalıdır – DAV

+0

Bu, bunu tamamlamak için çok kolay bir yoldur. Teşekkürler! –

cevap

0

Dene:

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) 

Benim tahminim sizin df$namefactor bir vector olmasıdır. Ancak gerçek veriler olmadan test etmek zordur.

2

tapply öğenizi x bir değere atayabilirsiniz, daha sonra x[!is.na(x)] işini yapar.

+0

'ile birlikte (df [grepl (" P ", df $ isim),], tapply (C_cont, ad, ortalama, na.rm = TRUE))' '' '' '' '' 'önler. –

+0

ile kullanmak, faktör düzeylerini adından korur. – DAV

+0

@DAV NA değerlerini yine de üretecektir. Bu sadece P' atamasını önlemek içindir. –