我有一个包含数据的Excel文件(5列和200行)。
下一行:
TransactionId
,UserId
,transaction_date
,transaction_status
,amount_USD
。
data.table就是这样(它不完整,只是为了抓住这个想法):
datatable1的截图
任务重新排列表格,它看起来像3列(transaction_date,CHARGED,DECLINED),其中CHARGED和DECKLINED - 是具有特定状态(Charged或Declined)的同一日期的所有amount_USD的总和。
所以,看起来应该是这样的:
而且,当我使用这样的代码从Excel导入时 - 它是否正确?
> library("xlsx")
> data1 <- read.xlsx("d:/R/1.xlsx", 1)
答案 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执行此任务,您可能希望将当前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
您可以在不使用R的情况下在Excel中完成相同的任务。
在Excel中突出显示数据范围,然后点击“插入”菜单 - &gt;数据透视表。
在“数据透视表”对话框中,将“日期”和“事务_类型”拖到“行”框中。将“Amount”拖到“值”框中,并将计算设置为SUM()。
输出结果相同。
希望这有帮助!