在R中排序和重新排列Excel数据表

时间:2016-07-23 16:23:14

标签: r excel

我有一个包含数据的Excel文件(5列和200行)。

下一行:

TransactionIdUserIdtransaction_datetransaction_statusamount_USD

data.table就是这样(它不完整,只是为了抓住这个想法):

datatable1的截图

enter image description here

任务重新排列表格,它看起来像3列(transaction_date,CHARGED,DECLINED),其中CHARGED和DECKLINED - 是具有特定状态(Charged或Declined)的同一日期的所有amount_USD的总和。

所以,看起来应该是这样的:

enter image description here

而且,当我使用这样的代码从Excel导入时 - 它是否正确?

> library("xlsx")

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

听起来你想要按日期和交易类型分组(Charged / Declined)。

我不确定您是否计划出于特定原因使用 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

您可以在不使用R的情况下在Excel中完成相同的任务。

  1. 在Excel中突出显示数据范围,然后点击“插入”菜单 - &gt;数据透视表。

  2. 在“数据透视表”对话框中,将“日期”和“事务_类型”拖到“行”框中。将“Amount”拖到“值”框中,并将计算设置为SUM()。

  3. 输出结果相同。

    希望这有帮助!