R - транспонировать столбцы и строки с условиями - PullRequest
0 голосов
/ 15 февраля 2019

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

library(dplyr)

titanic_tbl <- dplyr::tbl_df(Titanic)
titanic_tbl <- titanic_tbl %>%
mutate_at(vars(Class:Survived), funs(factor))
by_class_survival <- titanic_tbl %>%
group_by(Class, Survived) %>%
summarize(Count = sum(n))

Исходный кадр данных

# Class Survived Count
# 1 1st   No         122
# 2 1st   Yes        203
# 3 2nd   No         167
# 4 2nd   Yes        118
# 5 3rd   No         528
# 6 3rd   Yes        178
# 7 Crew  No         673
# 8 Crew  Yes        212

Создание нового кадра данных на основе значений by_class_survival

first <- c(122,203)
second <- c(167, 118)
third <- c(528,178)
crew <- c(673,212)

titanic.df = data.frame(first,second,third,crew)

library(data.table)
t_titanic.df <- transpose(titanic.df)
rownames(t_titanic.df) <- colnames(titanic.df)
colnames(t_titanic.df) <- c("No survivor", "Survivor")

Ожидаемый результат

##        No survivor Survivor
## first          122      203
## second         167      118
## third          528      178
## crew           673      212

Есть лучший способ достичь ожидаемого результата?

1 Ответ

0 голосов
/ 15 февраля 2019

Вы можете сделать это за один шаг с помощью reshape2::dcast:

library(reshape2)
library(dplyr)

titanic_tbl %>%
 dcast(Class ~ Survived, value.var = "n", sum)

  Class  No Yes
1   1st 122 203
2   2nd 167 118
3   3rd 528 178
4  Crew 673 212

или вы можете использовать tidyr::spread в суммированном фрейме данных:

library(tidyr)
titanic_tbl %>%
  group_by(Class, Survived) %>% 
  summarise(sum = sum(n)) %>%
  spread(Survived, sum)

# A tibble: 4 x 3
# Groups:   Class [4]
  Class    No   Yes
  <chr> <dbl> <dbl>
1 1st     122   203
2 2nd     167   118
3 3rd     528   178
4 Crew    673   212
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...