как изменить форму матрицы и заполнить недостающее значение как 0 - PullRequest
0 голосов
/ 29 января 2019

У меня есть вопрос о манипулировании структурой матрицы в R, здесь мне нужно сначала транспонировать матрицу и объединить столбцы месяца и состояния, заполнив отсутствующие значения 0. Здесь у меня есть пример, в настоящее время мои данные как ниже.Это кажется очень сложным.Буду признателен, если кто-нибудь может помочь в этом.Спасибо.

Привет, мои данные выглядят следующим образом:

  structure(list(Customer = c("1096261", "1096261", "1169502", 
    "1169502"), Phase = c("2", "3", "1", "2"), Status = c("Ontime", 
    "Ontime", "Ontime", "Ontime"), Amount = c(21216.32, 42432.65, 
    200320.05, 84509.24)), .Names = c("Customer", "Phase", "Status", 
    "Amount"), row.names = c(NA, -4L), class = c("grouped_df", "tbl_df", 
    "tbl", "data.frame"), vars = c("Customer", "Phase"), drop = TRUE, indices 
    = list(
    0L, 1L, 2L, 3L), group_sizes = c(1L, 1L, 1L, 1L), biggest_group_size = 1L, 
    labels = structure(list(
    Customer = c("1096261", "1096261", "1169502", "1169502"), 
    Phase = c("2", "3", "1", "2")), row.names = c(NA, -4L), class = 
    "data.frame", vars = c("Customer", 
    "Phase"), drop = TRUE, .Names = c("Customer", "Phase")))   

Мне нужна измененная матрица со следующими столбцами:
Customer Phase1earlyTotal Phase2earlyTotal .... Phase4earlyTotal... Phase1_ Ontimetotal ... Phase4_Ontimetotal ... Phase1LateTotal_Phase4LateTotal.Например, Phase1earlytotal включает сумму суммы с Phase = 1 и Status = Early.

В настоящее время я использую следующие сценарии, которые не работают, потому что я не знаю, как объединить Phase и Stuatus Column.

   mydata2<-data.table(mydata2,V3,V4)
    mydata2$V4<-NULL
    datacus <- data.frame(mydata2[-1,],stringsAsFactors = F); 
    datacus <- datacus %>% mutate(Phase= as.numeric(Phase),Amount= 
   as.numeric(Amount)) %>%
   complete(Phase = 1:4,fill= list(Amount = 0)) %>% 
   dcast(datacus~V3, value.var = 'Amount',fill = 0) %>% select(Phase, V3) 
   %>%t()

1 Ответ

0 голосов
/ 29 января 2019

Я полагаю, вы ищете что-то подобное?

пример данных

df <- structure(list(Customer = c("1096261", "1096261", "1169502", 
                            "1169502"), Phase = c("2", "3", "1", "2"), Status = c("Ontime", 
                                                                                  "Ontime", "Ontime", "Ontime"), Amount = c(21216.32, 42432.65, 
                                                                                                                            200320.05, 84509.24)), .Names = c("Customer", "Phase", "Status", 
                                                                                                                                                              "Amount"), row.names = c(NA, -4L), class = c("grouped_df", "tbl_df", 
                                                                                                                                                                                                           "tbl", "data.frame"), vars = c("Customer", "Phase"), drop = TRUE, indices 
          = list(
            0L, 1L, 2L, 3L), group_sizes = c(1L, 1L, 1L, 1L), biggest_group_size = 1L, 
          labels = structure(list(
            Customer = c("1096261", "1096261", "1169502", "1169502"), 
            Phase = c("2", "3", "1", "2")), row.names = c(NA, -4L), class = 
              "data.frame", vars = c("Customer", 
                                     "Phase"), drop = TRUE, .Names = c("Customer", "Phase")))   

#    Customer Phase Status    Amount
# 1:  1096261     2 Ontime  21216.32
# 2:  1096261     3 Ontime  42432.65
# 3:  1169502     1 Ontime 200320.05
# 4:  1169502     2 Ontime  84509.24

код

library( data.table )
dcast( setDT( df ), Customer ~ Phase + Status, fun = sum, value.var = "Amount" )[]

выход

#    Customer 1_Ontime 2_Ontime 3_Ontime
# 1:  1096261        0 21216.32 42432.65
# 2:  1169502   200320 84509.24     0.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...