Função tapply

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Função tapply

Mensagem por Juliano Moraes em Qui Nov 03, 2016 11:44 am

Olá Prof° Marcos e colegas,

Estou brincando com alguns dados que tenho e usando a função tapply, porém estou tendo alguns problemas com ela.

Eu tenho uma lista de locais (locais), que se subdividem em um subgrupo de sublocais (ca_mv), que por sua vez se subdividem em profundidades (profundidade), que finalmente possuem um valor de concentração de carvão no solo (conc_carv).

O que eu quero pedir ao R é uma média de conc_carv pra cada profundidade específica, porém considerando-se os subgrupos, ou seja: me dê a média de conc_carv para uma profundidade x, em um certo tipo de sublocal, pertencente a um local.

Minhas tabela é esta:

Código:
> dados2
           local       ca_mv profundidade  conc_carv
1          BAARÁ    CAPOEIRA         0-20 16.2623000
3      TTEWIKANI    CAPOEIRA        20-40  5.1047236
4      TTEWIKANI    CAPOEIRA         0-20 10.9572973
6      DOZOKOKOA    CAPOEIRA         0-20 14.8028235
7      DOZOKOKOA    CAPOEIRA         0-20 11.5404444
10     DOZOKOKOA MATA VIRGEM         0-20  0.6532000
11     DOZOKOKOA MATA VIRGEM        20-40  6.2823226
12     DOZOKOKOA MATA VIRGEM         0-20  0.2907692
13     DOZOKOKOA MATA VIRGEM        20-40  0.0000000
16   DZENONIDEMI    CAPOEIRA         0-20  6.6755556
17   DZENONIDEMI    CAPOEIRA        20-40  5.2229213
19  OOWADATAHINI    CAPOEIRA        20-40  2.9039416
21  OOWADATAHINI    CAPOEIRA         0-20 10.0436810
23    POIPOIDAMI    CAPOEIRA         0-20  8.8438889
24    POIPOIDAMI    CAPOEIRA        20-40  0.4134307
25    POIPOIDAMI    CAPOEIRA         0-20  1.1204734
26    POIPOIDAMI    CAPOEIRA        20-40  2.6115000
27   DOOMALIRIMA    CAPOEIRA         0-20  1.2136986
28   DOOMALIRIMA    CAPOEIRA        20-40  1.5263768
29   DOOMALIRIMA    CAPOEIRA         0-20  4.8887912
30   DOOMALIRIMA    CAPOEIRA        20-40  2.0843836
31 MATA VIRGEM 1 MATA VIRGEM         0-20  5.4000000
32 MATA VIRGEM 1 MATA VIRGEM        20-40  1.5800000
33 MATA VIRGEM 1 MATA VIRGEM         0-20  1.0705036
34 MATA VIRGEM 1 MATA VIRGEM        20-40  0.7370732
35 MATA VIRGEM 2 MATA VIRGEM         0-20  1.8284848
36 MATA VIRGEM 2 MATA VIRGEM        20-40  2.0885714
37 MATA VIRGEM 2 MATA VIRGEM         0-20  1.4945098
38 MATA VIRGEM 2 MATA VIRGEM        20-40  1.0021053
43     DZAKAREMI    CAPOEIRA         0-20  2.9512821
44     DZAKAREMI    CAPOEIRA        20-40  4.2305376
45    TARAPAPAWA    CAPOEIRA         0-20  2.3307865
55     DZAKAREMI    CAPOEIRA         0-20  9.4829557
56      IDZAWADA MATA VIRGEM         0-20  5.1740000
57      IDZAWADA MATA VIRGEM        20-40  8.6884848
60     DZAKAREMI    CAPOEIRA        20-40  2.4712000
61  SÍTIO ANTIGO    CAPOEIRA         0-20 13.3188571
62  SÍTIO ANTIGO    CAPOEIRA        20-40  5.1434146

Então eu quero as médias da profundidade, mas considerando-se o sublocal e o local.

Meu script:

setwd(choose.dir())

dir()

dados<-read.csv2("Icana.csv" , h=T)
head(dados)
attach(dados)
dados1<-dados[profundidade=="0-20" | profundidade=="20-40",c(3,4,6,10)]
dados2<-data.frame(dados1)
tapply(dados2$conc_carv,list(dados2$local,dados2$ca_mv,dados2$profundidade),mean)

Meu problema é que quando entro com a função tapply, primeiro ele me retorna todos os valores dos dados originais pra profundidade, e não somente as profundidades que estou usando (as demais profundidades ele entra com NA), e segundo ele entra com uma lista (pois pedi list), e eu não queria em forma de lista.

Podem me ajudar? Existe alguma outra forma de resolver isso?

Abs,

Juliano Moraes

Mensagens : 4
Data de inscrição : 26/10/2016
Localização : São Paulo

Ver perfil do usuário

Voltar ao Topo Ir em baixo

Re: Função tapply

Mensagem por Prof. Marcos em Qui Nov 03, 2016 8:38 pm

Dúvida resolvida ao vivo durante o webnário 1 da turma 3.0:


Código:

#Solução usando split:

dados<-structure(list(local = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
    sublocal = structure(c(1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L,
    1L, 1L, 3L, 2L, 1L, 1L, 2L, 3L), .Label = c("a", "b", "c"
    ), class = "factor"), profundidade = structure(c(2L, 1L,
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L
    ), .Label = c("0 a 10", "10 a 20"), class = "factor"), concentração = c(11L,
    15L, 23L, 25L, 21L, 21L, 21L, 29L, 19L, 25L, 22L, 16L, 15L,
    23L, 28L, 18L, 18L)), .Names = c("local", "sublocal", "profundidade",
"concentração"), class = "data.frame", row.names = c(NA, -17L
))



tapply(dados$concentração, dados$local, mean)


dados.local<-split(dados, dados$local)

dados.A<-dados.local$A
dados.B<-dados.local$B

dados.A.sublocal<-split(dados.A, dados.A$sublocal)

dados.A.a<-dados.A.sublocal$a
dados.A.b<-dados.A.sublocal$b

tapply(dados.A.a$concentração, dados.A.a$profundidade, mean)
avatar
Prof. Marcos

Mensagens : 259
Data de inscrição : 23/12/2015
Idade : 36
Localização : Maceió, AL

Ver perfil do usuário https://cantinhodor.wordpress.com/

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum