Comment puis-je diviser une colonne d'une base de données par une autre?

je voulais diviser une colonne à l'autre pour obtenir la par personne temps comment puis-je faire cela?Je n'ai rien trouvé sur la façon de diviser.

Voici quelques données que je veux utiliser

     min    count2.freq
263807.0    1582
196190.5    1016
586689.0    3479

À la fin, je veux ajouter une troisième colonne, comme ce qui a le nombre de min / count2.freq

e.g 263808.0/1582 = 166.75

16
demandé sur zx8754 2012-10-22 18:10:18

2 réponses

il y a une pléthore de façons de le faire. Le problème est de savoir comment rendre R conscient de l'emplacement des variables que vous souhaitez diviser.

en Supposant que

d <- read.table(text = "263807.0    1582
196190.5    1016
586689.0    3479
")
names(d) <- c("min", "count2.freq")
> d
       min count2.freq
1 263807.0        1582
2 196190.5        1016
3 586689.0        3479

Ma manière préférée

pour ajouter la division désirée comme troisième variable j'utiliserais transform()

> d <- transform(d, new = min / count2.freq)
> d
       min count2.freq      new
1 263807.0        1582 166.7554
2 196190.5        1016 193.1009
3 586689.0        3479 168.6373

La base R

si vous faites cela dans une fonction (i.e. vous programmez) alors mieux d'éviter le sucre montré ci-dessus et l'index. Dans ce dans le cas où l'un d'entre eux ferait ce que vous voulez

## 1. via `[` and character indexes
d[, "new"] <- d[, "min"] / d[, "count2.freq"]

## 2. via `[` with numeric indices
d[, 3] <- d[, 1] / d[, 2]

## 3. via `$`
d$new <- d$min / d$count2.freq

tous ceux-ci peuvent être utilisés à l'invite aussi, mais qui est plus facile à lire:

d <- transform(d, new = min / count2.freq)

ou

d$new <- d$min / d$count2.freq ## or any of the above examples

j'espère que vous penser comme moi et la première version est mieux ;-)

La raison pour laquelle nous n'utilisons pas le sucre syntaxique de tranform() et al quand la programmation est à cause de la façon dont ils font leur évaluation (chercher les variables nommées). Au niveau le plus élevé (à l'invite, en travaillant de manière interactive) transform() et al fonctionnent tout aussi bien. Mais enfoui dans des appels de fonction ou dans un appel à l'un des apply() famille de fonctions qu'ils peuvent et souvent ne pause.

de Même, soyez prudent en utilisant des indices numériques (## 2. ci-dessus); si vous modifier l'ordre de vos données, vous sélectionnez le mauvais variables.

Le moyen privilégié si vous n'avez pas besoin de remplacement

Si vous avez envie de faire la division (plutôt que d'insérer le résultat dans le bloc de données, puis utilisez with(), ce qui nous permet d'isoler la simple expression que vous souhaitez évaluer

> with(d, min / count2.freq)
[1] 166.7554 193.1009 168.6373

c'est encore une fois un code beaucoup plus propre que l'équivalent

> d$min / d$count2.freq
[1] 166.7554 193.1009 168.6373

car il indique explicitement que " en utilisant d, exécutez le code min / count2.freq. Votre préférence peut être différente de la mienne, donc j'ai montré toutes les options.

39
répondu Gavin Simpson 2012-10-22 15:07:11

Hadley Wickham

dplyr

packages est toujours un épargnant en cas de dispute. Pour ajouter la division désirée comme troisième variable, j'utiliserais mutate()

d <- mutate(d, new = min / count2.freq)
1
répondu Azam Yahya 2015-10-16 06:17:36