Função tapply
3 participantes
Página 1 de 1
Função tapply
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:
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,
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
Re: Função tapply
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)
Re: Função tapply
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.
Obrigada.
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.
Obrigada.
Carolina Lorieri- Mensagens : 35
Data de inscrição : 01/04/2020
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|