在R中重新安排CSV表

时间:2014-05-17 21:08:12

标签: r reshape

看到R避免无休止的Excel-Copy-and-paste-sessions的巨大可能性,我开始探索它,但现在我在格式化几个(15+).csv表时遇到了麻烦。它们都具有相同的外观:

Date;Value;Name
1.1.2011;30;GWM5
1.2.2011;31;GWM5
1.3.2011;35;GWM5
1.4.2011;31;GWM5
1.1.2011;23;GWM5
1.2.2011;24;GWM5
1.3.2011;21;GWM5
1.4.2011;22;GWM5

如您所见,名称是常量,日期重新出现,只有值是可变的。我需要把它放在这样的表中:

Name;date;value1;value2
GWM5;1.1.2011;30;23
GWM5;1.2.2011;31;24
GWM5;1.3.2011;35;21
GWM5;1.4.2011;31;22

我已经尝试过订购,转置和确定重复项。但是转置(即使作为一个函数:http://www.endmemo.com/program/R/transpose.php)并没有在单个单元格中给出正确的排列(在1个单元格中总是有2个或更多的值)并且确定重复只给了我单个值,而不是行。

你能帮帮我吗?我想避免手动将它们放入Excel中的正确顺序。

2 个答案:

答案 0 :(得分:3)

基础R方法将是这样的:

mydf <- read.csv("your.file.txt", sep=";")
mydf$time <- with(mydf, ave(rep(1, nrow(mydf)), Date, FUN = seq_along))
reshape(mydf, direction = "wide", idvar=c("Name", "Date"), timevar="time")
#           Date Name Value.1 Value.2
# 1     1.1.2011 GWM5      30      23
# 2     1.2.2011 GWM5      31      24
# 3     1.3.2011 GWM5      35      21
# 4     1.4.2011 GWM5      31      22

答案 1 :(得分:2)

这似乎是正确的,尽管可能有一种更简单的方法:

d <- read.csv2(text="
Date;Value;Name
1.1.2011;30;GWM5
1.2.2011;31;GWM5
1.3.2011;35;GWM5
1.4.2011;31;GWM5
1.1.2011;23;GWM5
1.2.2011;24;GWM5
1.3.2011;21;GWM5
1.4.2011;22;GWM5")

library(reshape2)
library(plyr)
d2 <- ddply(d,"Date",transform,n=paste0("Value",seq_along(Value)))
dcast(d2,Date+Name~n,value.var="Value")
##           Date Name Value1 Value2
## 1     1.1.2011 GWM5     30     23
## 2     1.2.2011 GWM5     31     24
## 3     1.3.2011 GWM5     35     21
## 4     1.4.2011 GWM5     31     22