Ads Top

R - Classificando um data frame pelo conteúdo de uma coluna

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="">

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:

Tecnologia do Blogger.