Vamos examinar como classificar o conteúdo de um data frame pelo valor de uma coluna.
> numPeople = 10
> sex=sample(c("male","female"),numPeople,replace=T)
> age = sample(14:102, numPeople, replace=T)
> income = sample(20:150, numPeople, replace=T)
> minor = age<18 i="">18>
Esta última declaração pode parecer surpreendente se você está acostumado a Java ou a uma linguagem de programação tradicional. Em vez de se tornar um único valor booleano/true, o menor realmente se torna um vetor de valores verdadeiros, um por linha na coluna idade. É equivalente ao código muito mais detalhado em Java:
int[] age= ...;
for (int i = 0; i < income.length; i++) {
minor[i] = age[i] < 18;
}
Assim como esperado, o valor de "minor" é um vetor:
> mode(minor)
[1] "logical"
> minor
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
Em seguida, criamos um data frame, que agrupa nossos vários vetores nas colunas de uma estrutura de dados:
> population = data.frame(sex=sex, age=age, income=income, minor=minor)
> population
sex age income minor
1 male 68 150 FALSE
2 male 48 21 FALSE
3 female 68 58 FALSE
4 female 27 124 FALSE
5 female 84 103 FALSE
6 male 92 112 FALSE
7 male 35 65 FALSE
8 female 15 117 TRUE
9 male 89 95 FALSE
10 male 26 54 FALSE
Os argumentos (sex=sex, age=age, income=income, minor=minor) atribuem os mesmos nomes às colunas como eu originalmente nomeei os vetores; Eu poderia facilmente chamá-los de qualquer coisa. Por exemplo,
> data.frame(a=sex, b=age, c=income, minor=minor)
a b c minor
1 male 68 150 FALSE
2 male 48 21 FALSE
3 female 68 58 FALSE
4 female 27 124 FALSE
5 female 84 103 FALSE
6 male 92 112 FALSE
7 male 35 65 FALSE
8 female 15 117 TRUE
9 male 89 95 FALSE
10 male 26 54 FALSE
Mas prefiro os rótulos mais descritivos que dei anteriormente.
> population
sex age income minor
1 male 68 150 FALSE
2 male 48 21 FALSE
3 female 68 58 FALSE
4 female 27 124 FALSE
5 female 84 103 FALSE
6 male 92 112 FALSE
7 male 35 65 FALSE
8 female 15 117 TRUE
9 male 89 95 FALSE
10 male 26 54 FALSE
Agora, digamos que queremos ordenar pela idade das pessoas.
> population[order(population$age),]
sex age income minor
8 female 15 117 TRUE
10 male 26 54 FALSE
4 female 27 124 FALSE
7 male 35 65 FALSE
2 male 48 21 FALSE
1 male 68 150 FALSE
3 female 68 58 FALSE
5 female 84 103 FALSE
9 male 89 95 FALSE
6 male 92 112 FALSE
Isso não é mágica; você pode selecionar linhas arbitrárias de qualquer quadro de dados com a mesma sintaxe:
> population
sex age income minor
1 male 68 150 FALSE
2 male 48 21 FALSE
3 female 68 58 FALSE
A função order apenas retorna os índices das linhas em ordem classificada:
> order(population$age)
[1] 8 10 4 7 2 1 3 5 9 6
Observe a sintaxe $; você seleciona colunas de um quadro de dados usando um cifrão e o nome da coluna. Você pode recuperar os nomes das colunas de um quadro de dados com a função de nomes.
> names(population)
[1] "sex" "age" "income" "minor"
> population$income
[1] 150 21 58 124 103 112 65 117 95 54
> income
[1] 150 21 58 124 103 112 65 117 95 54
Com esse tupo de exemplo você consegue classificar o conteúdo de uma coluna em um data frame em R.
Nenhum comentário:
Postar um comentário