В R, как выбрать конкретные значения ячеек / элементы, выполнить вычисления с ними и отобразить его в определенном формате - PullRequest
0 голосов
/ 15 мая 2018

У меня есть набор данных опроса (df), похожий на приведенный ниже, где есть набор вопросов, начиная с Q1_Grid.Он имеет три столбца: Вес, Общая и Невзвешенная база:

 Weight     Total             Unweighted Base
Q1_Grid   Unweighted Base            10000
          Base                       10000
          A lot better [5]           1000
          A little better [4]        2000
          The same [3]               3000
          Not applicable             4000
          Don’t know                 5000
          Net: Better                9%
          Net: Worse                 12%
          Mean                       2.81
          Standard deviation         0.86
          Standard Error             -

Из этого набора данных я пытаюсь записать выходной файл CSV в следующем формате:

Q1_Grid     Unweighted Base      10000
            Base                 10000
            Net: Balance         3%

Выводсодержит Вопросы (Q1_Grid) и первые два элемента Всего (Невзвешенная База, База) и разницу в значениях «Нетто: Хуже» и «Нетто: Лучше» в процентах.

Я написал следующий код, но онне дает мне желаемого результата.

target<-c("Net: Worse","Net: Better")
dfT2$Unweighted.Base<-as.numeric(dfT2$Unweighted.Base)
dfT2 %>%
  select("Weight","Total","Unweighted.Base")
  filter(Total %in% target)
  mutate(dfT2,"Net Balance", diff(Unweighted.Base))

Список пакетов / библиотек, которые я использовал:

-library(tidyverse)
-library(dplyr)

У вас есть какой-нибудь другой простой способ получить желаемый результат?Я относительно новичок в R и, следовательно, был бы признателен за любую помощь от сообщества.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Можете ли вы попробовать использовать распространение и сбор?

 dfT2 %>% 
        spread(Total,Unweighted.Base) %>% 
        select('Weight','Unweighted Base' , 'Net.Better' ,'Net.Worse') %>% 
        mutate(NetBalance = Net.Worse - Net.Better) %>%
        gather(Total, Unweighted, -(Weight))
0 голосов
/ 15 мая 2018

Что если вы получите строку Net: Balance, непосредственно вычитая:

balance <- dfT2[dfT2$Total == "Net: Worse", "Unweighted.Base"] - dfT2[dfT2$Total == "Net: Better", "Unweighted.Base"]

И затем вы можете привязать это к концу вашего отфильтрованного фрейма данных:

dfT2 %>%
    select("Weight","Total","Unweighted.Base") %>%
    filter(Total %in% target) %>%
    rbind(c("", "Net: Balance", balance))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...