Добавить строку в кадр данных с помощью dplyr
У меня есть данные этого образца:
cvar <- c("2015-11-01","2015-11-02","All")
nvar1 <- c(12,10,5)
nvar2 <- c(7,5,6)
data <- cbind.data.frame(cvar,nvar1,nvar2)
И я просто хочу добавить новую строку в data.frame, содержащий суммы nvar1 и nvar2 и символ, поэтому с базой R я бы просто использовал
data[nrow(data)+1,] <- c("add",sum(data[,2]),sum(data[,3]))
или что-то более умное с лапкой, но просто чтобы показать вам, что я ищу.
Мне нужна эта простая команда в среде pipe, поэтому data% > %... дает мне результат выше.
Оцените любую помощь, спасибо.
Ответы
Ответ 1
Что-то вроде этого, может быть:
data %>%
rbind(c("add",sum(nvar1),sum(nvar2)))
# cvar nvar1 nvar2
#1 2015-11-01 12 7
#2 2015-11-02 10 5
#3 All 5 6
#4 add 27 18
Edit:
Согласно вашему комментарию, это будет работать:
data %>%
mutate(nvar3 = nvar1) %>%
rbind(c("add",sum(nvar1),sum(nvar2),sum(.$nvar3)))
Использование .
позволит rbind
найти nvar3
Edit2:
Предоставьте новую строку в виде списка и сохраните классы столбцов:
> str(
+ data %>%
+ mutate(nvar3 = nvar1) %>%
+ rbind(list("add",sum(nvar1),sum(nvar2),sum(.$nvar3)))
+ )
'data.frame': 4 obs. of 4 variables:
$ cvar : chr "2015-11-01" "2015-11-02" "All" "add"
$ nvar1: num 12 10 5 27
$ nvar2: num 7 5 6 18
$ nvar3: num 12 10 5 27
Ответ 2
С помощью tibble
версии 1.2 вы можете использовать add_row()
https://blog.rstudio.org/2016/08/29/tibble-1-2-0/
data %>%
add_row(cvar = "add", nvar1 = sum(nvar1), nvar2 = sum(nvar2))
Ответ 3
Используя только dplyr
, вы можете сделать следующее
data %<>%
summarise(cvar = "add",
nvar1 = sum(nvar1),
nvar2 = sum(nvar2)) %>%
bind_rows(data)
что приводит к
cvar nvar1 nvar2
1 add 27 18
2 2015-11-01 12 7
3 2015-11-02 10 5
4 All 5 6
Обратите внимание, что таким образом новая строка добавляется в начале, а не в конец исходного фрейма.
Если вы хотите добавить новую строку в конец вместо, используйте следующий код (благодаря krlmlr для указания этого варианта)
data %<>%
summarise(cvar = "add",
nvar1 = sum(nvar1),
nvar2 = sum(nvar2)) %>%
bind_rows(data, .)
что приводит к
cvar nvar1 nvar2
1 2015-11-01 12 7
2 2015-11-02 10 5
3 All 5 6
4 add 27 18
Ответ 4
Очень простой пример с использованием bind_rows
:
myvalues<-data.frame(MyValue=c(123),MyOtherValue=c(456))
myvalues %>%
bind_rows(data_frame(MyValue=c(789),MyOtherValue=c(101112)))