Как я могу разделить один столбец данных на другой? - программирование
Подтвердить что ты не робот

Как я могу разделить один столбец данных на другой?

Я хотел разделить один столбец на другой, чтобы получить время на человека, как я могу это сделать? Я не мог найти ничего о том, как вы можете разделить.

Вот некоторые данные, которые я хочу использовать

     min    count2.freq
263807.0    1582
196190.5    1016
586689.0    3479

В конце концов, я хочу добавить третий столбец, который имеет номер от min / count2.freq

e.g 263808.0/1582 = 166.75

4b9b3361

Ответ 1

Существует множество способов, которыми это можно сделать. Проблема заключается в том, как сделать R осведомленным о местах переменных, которые вы хотите разделить.

Полагая

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

Мой предпочтительный способ

Чтобы добавить желаемое деление в качестве третьей переменной, я бы использовал 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

Основной путь R

Если это делается в функции (т.е. вы программируете), лучше всего избегать показанного выше сахара и индекса. В этом случае любой из них сделает то, что вы хотите

## 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

Все они также могут использоваться в подсказке, но которые легче читать:

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

или

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

Надеюсь, вы думаете, что я делаю, и первая версия лучше; -)

Причина, по которой мы не используем синтаксический сахар tranform() et al, когда программирование связано с тем, как они выполняют свою оценку (ищите именованные переменные). На верхнем уровне (в подсказке, работая в интерактивном режиме) transform() и другие работают просто отлично. Но похоронен в функциональных вызовах или в вызове одному из семейств функций apply(), которые они могут и часто прерывают.

Аналогично, будьте осторожны с использованием числовых индексов (## 2. выше); если вы измените порядок своих данных, вы выберете неправильные переменные.

Предпочтительный вариант, если вам не нужна замена

Если вы просто хотите сделать деление (вместо того, чтобы вставить результат обратно в фрейм данных, используйте with(), что позволяет нам изолировать простое выражение, которое вы хотите оценить

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

Это намного более чистый код, чем эквивалентный

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

поскольку он явно заявляет, что "используя d, выполните код min / count2.freq. Ваши предпочтения могут отличаться от моих, поэтому я показал все параметры.

Ответ 2

Хэдли Уикхем

dplyr

Пакеты

всегда являются хранителем в случае перебора данных. Чтобы добавить желаемое деление в качестве третьей переменной, я использовал бы mutate()

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