Programa R para Biologia da Conservação
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Função tapply

3 participantes

Ir para baixo

Função tapply Empty Função tapply

Mensagem por Juliano Moraes 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

Ir para o topo Ir para baixo

Função tapply Empty Re: Função tapply

Mensagem por Prof. Marcos 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)
Prof. Marcos
Prof. Marcos

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

https://cantinhodor.wordpress.com/

Ir para o topo Ir para baixo

Função tapply Empty Re: Função tapply

Mensagem por Carolina Lorieri Sáb maio 16, 2020 8:55 am

Olá professor

Na tentativa de não fazer perguntas repetidas achei um problema similar ao meu aqui, porém fiquei com uma pulga atrás da orelha.

A minha situação é MUITO parecida com a do Juliano (essa duvida postada é de 2016), porém eu tenho muitossssss "sublocais", no meu caso esses sublocais são horas e dias da semana específicos de cada coleta. Por exemplo: Primeira quinta- feira 8h, Segunda quinta-feira 8h, Terceira quinta-feira 8h, de diferentes indivíduos (unidades amostrais).
E isso se repete para outros dias da semana e horários como Sábado, Domingo e Segunda, e diferentes horários 8h, 12h, 16h 20h,  ficando com essa quantidade distribuído dessa maneira quando chamo o Summay no R:
     individuo      dia_hr    
fantastico:48   1do12  :  6  
halley    :48   1do16  :  6    
imperio   :48   1do20  :  6  
lafuria   :48   1do8   :  6    
vietna    :48   1qf12  :  6  
vigor     :48   1qf16  :  6  
                  (Other):252


- Dúvida 1: Então terei que fazer esse objeto "dados.A.a<-dados.A.sublocal$a", para cada 288 "sublocais", ou seja para cada  dia_hr? Não teria um jeito menos trabalhoso?

- Duvida 2: tudo que estou tentando fazer nesse momento é avaliar homogeneidade dos meus dados (acabei de ver todas as aulas do módulo 4), será que conseguirei compreender melhor essas relações e analises quando chegar nas aulas do módulo 5, quando entenderei como trabalho com várias médias em um universo com 2 variáveis categóricas explicativas, e 1 variável quantitativa resposta? Ouuuu eu comi bola e não compreendi algum conceito importante no meio do caminho de aprendizagem até agora?

- Duvida 3: além do tapply estou utilizando outras funções e gráficos como: boxplot, qqnorm, shapiro e levene, para analise da normalidade, homogeneidade e simetria dos dados (com os cuidados que o senhor comentou durante suas explicações principalmente no shapiro e levene), teria algum outro teste que deveria fazer neste momento com esse meu universo amostra (2 variáveis categóricas explicativas, e 1 variável quantitativa resposta)?

ps1: a título de curiosidade minha pesquisa é para mestrado, realizo dosagens hormonais em aves de cativeiro - estou avaliando estresse.
ps2: inicialmente seria uma única pergunta, mas ai me empolguei ... kkkk
ps3: estou adorando as aulas, webnário e usando e abusando do Forúm. Smile

Obrigada.
Carolina Lorieri
Carolina Lorieri

Mensagens : 35
Data de inscrição : 01/04/2020

Ir para o topo Ir para baixo

Função tapply Empty Re: Função tapply

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos