我有一个excel数据集(保存为csv),它有3列和数千行数据。我需要重新组织这些数据,以便其中一些以某些增量重复。为了说明,我说我有三列标题的以下数据:
X Y Z
1 5 2
2 18 23
3 9 25
4 10 32
5 11 34
6 23 24
7 89 54
8 25 12
9 24 10
10 3 11
(仅供参考,此数据仅用于说明目的) 我的目标是通过复制一些行(比如一次4行)重新组织这些数据,然后一个接一个地插入它们,从而产生交错的效果。因此,如果我们对上面的示例数据执行此操作,则不会复制第1-4行,而是先复制第2-5行,然后在第4行之后插入。这将对原始行3-6重复,然后是原始行4-7等,直到一个人不能再复制/插入4行的整个增量(在这种情况下,当我们按行7-10时)实际上:
X Y Z
1 5 2
2 18 23
3 9 25
4 10 32
2 18 23
3 9 25
4 10 32
5 11 34
3 9 25
4 10 32
5 11 34
6 23 24
4 10 32
5 11 34
6 23 24
7 89 54
5 11 34
6 23 24
7 89 54
8 25 12
6 23 24
7 89 54
8 25 12
9 24 10
7 89 54
8 25 12
9 24 10
10 3 11
(仅供参考:我使用粗体和斜体仅用于强调)
我不喜欢在R中这样做 - 如果可以在Excel(或任何其他程序)中完成,我会很高兴听到如何。考虑到这些excel文件的大小,我手动复制/插入是不可行的。我猜可以使用某种for循环吗?
谢谢!
答案 0 :(得分:0)
这应该适用于您的示例(假设您的数据位于名为my.data
的矩阵或数据框中):
my.data[ as.vector( mapply(1:7, 4:10, FUN='seq') ), ]
然后,您只需更改7和10即可代表您的数据(可能是nrow(my.data)-3
和nrow(my.data)
)。
答案 1 :(得分:0)
看起来我能够找到一个有效的解决方案。这是代码:
## Import Data from CSV ##
require(xlsx)
require(rJava)
ogdata <- read.table("dataupload.csv", header = TRUE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "")
str(ogdata)
##Add x, the cut off for ogdata ##
x<-nrow(ogdata)
## Manipulate ogdata to add day and hour columns ##
require(lubridate)
require(methods)
dates<-as.POSIXlt(ogdata$Time)
ogdata$hour<-hour(dates)
ogdata$day<-mday(ogdata$Time)
############## FOR LOOPS!!! ################
# counts
a<-1
b<-720
#anchor
anchorFrame<-data.frame((ogdata[a:b, "hour"]),
(ogdata[a:b, "Value"]))
#the for loop should be indexed in a sequenced where it goes from 0 to x-30,
# moving up by 24 (i.e. one day at a time)
a=a+24
b=b+24
for (i in seq(from=25, to=(x-30), by=24)) {
tframes<-data.frame((ogdata[a:b, "hour"]),
(ogdata[a:b, "Value"]))
anchorFrame<-rbind(anchorFrame, tframes)
a=a+24
b=b+24
}
##Create new counter for anchorFrame
y<-nrow(anchorFrame)
lineNumber<-c(seq(1:y))
## Create a Day 'For loop'
daylinenumber<-c(seq(1:(30*24)))
Day<-data.frame(c(ceiling(daylinenumber/24)))
for (i in seq(from=721, to=(y), by=720)) {
nextmonthofdays<-data.frame(c(ceiling(daylinenumber/24)))
Day<-rbind(Day, nextmonthofdays)
}
## Create "t," or the variable known as "Time Frame"
anchorFrame$t<-c(ceiling(lineNumber/720))
## Bind columns in the correct order
FinalSet<-cbind(Day, anchorFrame)
## Give column header the correct names
colnames(FinalSet)<-c("Day", "Hour", "Value", "time")
#### Export data as a csv #####