2016-07-23 3 views
0

У меня есть файл Excel с данными (5 столбцов и 200 строк).Сортировка и переупорядочение Excel в R

Ряды являются следующие:

TransactionId, UserId, transaction_date, transaction_status, amount_USD.

data.table как то (это не полный, только поймать идею):

Скриншот datatable1

enter image description here

Задача состоит в переставить стол в пути он будет выглядят как 3 столбца (transaction_date, CHARGED, DECLINED), где CHARGED и DECKLINED - это сумма всей суммы_USD к той же дате со специальным статусом (с оплатой или отклонением).

Таким образом, это должно выглядеть так:

enter image description here

А также, когда я использую такой код для импорта из Excel - это правильно?

> library("xlsx") 

> data1 <- read.xlsx("d:/R/1.xlsx", 1) 
+2

Добро пожаловать в StackOverflow! Пожалуйста, прочитайте информацию о [как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и как дать [воспроизводимый пример] (http://stackoverflow.com/questions/ 5963269/как к Make-A-пра-р-воспроизводимая-пример/5963610). Это облегчит вам помощь другим людям. – Jaap

+0

Если вы можете читать данные из Excel, тогда вставьте образец представления данных с помощью 'dput', и мы сможем помочь вам его перестроить. Если вы не можете импортировать данные из Excel, сначала сосредоточьтесь на этой проблеме и сообщите нам, какое сообщение об ошибке вы получите. –

ответ

0

Похоже, вы хотите группировать по дате и типу сделки (с оплатой/отклонением).

Я не уверен, если вы планируете использовать R по определенной причине, поэтому я покажу вам один из способов сделать это в R, а также, как это сделать в Excel, в случае, если хочу сэкономить немного усилий.

  • Использование R

Если вы планируете использовать R для этой задачи, вы можете сохранить текущий файл Excel «filename.xlsx» как «filename.csv», потому что R требует некоторых дополнительные библиотеки для чтения в собственных файлах Excel. Они никогда не работали для меня, поэтому я просто использую файлы .csv.
dummy_csv файл я создал отформатирован, как ваша, так что просто изменить код при необходимости:

> dummy_csv 
    transaction_ID  Date Transaction_type Amount 
1   101 12.1.2016   Charged $270.29 
2   102 1.6.2015   Declined $840.25 
3   103 12.1.2016   Charged $233.26 
4   104 1.7.2016   Declined $406.04 
5   105 1.7.2016   Charged $886.73 
6   106 12.1.2016   Declined $348.44 
7   107 3.8.1015   Charged $430.09 
8   108 3.7.2015   Declined $655.17 

Вот код:

install.packages('dplyr') # Install dplyr if you don't have it. 
library(dplyr) # Load dplyr 


dummy_csv <- read.csv("~/dummy_csv.csv") # Import dataset 

dummy_csv <- tbl_df(dummy_csv) # Convert to table dataframe via dplyr 

dummy_csv$Amount <- sub(pattern = "$", # Get rid of dollar signs 
        replacement = "", 
        x=as.character(dummy_csv$Amount), 
        fixed=TRUE) 

dummy_csv <- mutate(dummy_csv,Amount = as.numeric(Amount)) # Make the values numeric 

dummy_csv <- dummy_csv %>% 
      group_by(Date,Transaction_type) %>% 
      summarise('Daily_Total' = sum(Amount)) 

Выход в R будет:

 Date Transaction_type Daily_Total 
(fctr)   (fctr)  (dbl) 
1 1.6.2015   Declined  840.25 
2 1.7.2016   Charged  886.73 
3 1.7.2016   Declined  406.04 
4 12.1.2016   Charged  503.55 
5 12.1.2016   Declined  348.44 
6 3.7.2015   Declined  655.17 
7 3.8.1015   Charged  430.09 
  • Использование Excel

Вы можете выполнить ту же задачу в Excel без использования R.

  1. Выделите диапазон данных в Excel и выберите в меню Вставка -> сводной таблицы.

  2. В диалоговом окне «Сводная таблица» перетащите «Дата» и «Транзакция_Тип» в поле «Строки». Перетащите «Сумма» в поле «Значения» и установите вычисление как SUM().

Выход будет таким же.

Надеюсь, это поможет!

+0

Спасибо! Код выглядит нормально, надеюсь, что задача тоже будет в порядке. И да, вариант с Excel намного лучше, но задача была именно в R = ( –

0

На эти вопросы уже был дан ответ. Вот post Я нашел через 2 секунды относительно проблем с чтением файлов .xlsx в R.

Я рекомендую сохранить файл xlsx как .csv и использовать read.csv. Прочтите файл примерно так:

data1 <- read.csv("d:/R/1.csv", stringsAsFactors=FALSE) 

R не узнает соответствующие форматы для вашей даты и доллара США. Вы можете убедиться, что измените свою долларовую колонку, указав . вместо ,.

Вот то, что вы хотите достичь с помощью reshape() с данными выборки, так как вы не предоставили какой-либо из R.

data1 <- data.frame(
    date=c("22.08.2015","11.08.2015","24.08.2015","28.07.2015"), 
    transaction_status=c("CHARGED","DECLINED","CHARGED","DECLINED"), 
    amount=c(10.96,14.7,10.61,10.96) 
) 

#convert your date from character to date 
data1$date <- as.Date(data1$date, "%d.%m.%Y") 

#put your data in wide format 
data1 <- reshape(data1, idvar="date", timevar="transaction_status", direction="wide") 

#sort by date 
data1 <- data1[order(data1$date),] 

Является ли этот вывод, что вы ищете?

> data1 
     date amount.CHARGED amount.DECLINED 
4 2015-07-28    NA   10.96 
2 2015-08-11    NA   14.70 
1 2015-08-22   10.96    NA 
3 2015-08-24   10.61    NA 
+0

Спасибо! Представленный снимок экрана - это не вся таблица данных ... Всего 200 строк. Правильно ли, что ваш метод - милю ручной, создавая таблицу? А как насчет результата - это выглядит правильно. =) –

+0

@ P.Dan Я не уверен, понимаю ли я ваш вопрос. Созданные мной данные были всего лишь примером с тремя столбцами и четырьмя строками. Я должен добавить следующее: поскольку у вас есть эти два других столбца, вы должны установить 'idvar = c (« TransactionId »,« UserId »,« transaction_date »)', когда вы используете 'reshape'. Если я правильно ответил на ваш вопрос, пожалуйста, проверьте его :) – Warner

+0

Жаль, что это был опечаток («миля» = «нравится»). Я действительно не понимаю этого шага: «data1 <- data.frame (....» - это одно создание вашего собственного образца? Я имею в виду, когда я импортирую .csv - это НЕ data.frame с самого начала , должен ли я преобразовать импортированные .csv в data.frame или smth? Потому что, когда я пробовал без этого шага, он пишет мне, что он не знает, как преобразовать «данные $ transaction_date» в класс «date» ... –

Смежные вопросы