看到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中的正确顺序。答案 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