Добавление нового столбца с функцией diff (), когда в R меньше одной строки

r diff

2687 просмотра

2 ответа

Если у меня есть пример фрейма данных, например mtcars, и я хочу найти разницу между mtcars $ qsec для всех строк, я могу сделать diff (mtcars $ qsec). Но есть ли простой способ сделать diff (mtcars $ qsec) новым столбцом в исходном фрейме данных mtcars? Я нахожу это трудным, потому что в diff меньше строки (mtcars $ qsec), чем в остальных mtcars.

> head(mtcars,3)

               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Автор: lg929 Источник Размещён: 12.11.2019 09:41

Ответы (2)


5 плюса

Решение

Вот два подхода. Оба положить NAв первый ряд diff_qsecи положить diff(qsec)в остальные ряды:

library(dplyr)  
mtcars %>% mutate(diff_qsec = qsec - lag(qsec)) # dplyr has its own version of lag

transform(mtcars, diff_qsec = c(NA, diff(qsec)))

Также, по общему вопросу заполнения смотрите: Как я могу дополнить вектор с NA спереди?

Автор: G. Grothendieck Размещён: 15.09.2016 03:00

1 плюс

Вы можете использовать базовую функцию в () следующим образом:

mtcars <- within(mtcars, difference <- c(NA,diff(qsec)))

Это создает столбец с именем «разность» с первым элементом NA, а остальные вычисляются как diff (qsec).

Вы можете создать больше столбцов одновременно, обернув команды в {}, такие как:

mtcars <- within(mtcars, {difference <- c(NA,diff(qsec))
                         multiple <- qsec*2})

Обратите внимание, что вы должны использовать <- для назначения, а не =.

Автор: greghk Размещён: 15.09.2016 03:19
Вопросы из категории :
32x32