我有一系列按順序標記的批處理記錄。有時批次重疊。在向量中查找唯一一組字符串,其中向量元素可以是多個字符串
x <- c("1","1","1/2","2","3","4","5/4","5")
> data.frame(x)
x
1 1
2 1
3 1/2
4 2
5 3
6 4
7 5/4
8 5
我想查找不重疊的批次集並標記這些時間段。批次「1/2」包括「1」和「2」,因此它不是唯一的。當批次=「3」時,它不包含在任何以前的批次中,因此它開始一個新的時期。我很難處理合並的批次,否則這將很簡單。這樣做的結果是:
x period
1 1 1
2 1 1
3 1/2 1
4 2 1
5 3 2
6 4 3
7 5/4 3
8 5 3
我的經驗是在更多的功能性編程範例,所以我知道我做這個的方式是非R。我正在尋找在R中乾淨而簡單的方法。任何幫助表示讚賞。
這是我的un-R代碼,但超級笨重,不可擴展。
x <- c("1","1","1/2","2","3","4","5/4","5")
p <- 1 #period number
temp <- NULL #temp variable for storing cases of x (batches)
temp[1] <- x[1]
period <- NULL
rl <- 0 #length to repeat period
for (i in 1:length(x)){
#check for "/", split and add to temp
if (grepl("/", x[i])){
z <- strsplit(x[i], "/") #split character
z <- unlist(z) #convert to vector
temp <- c(temp, z, x[i]) #add to temp vector for comparison
}
#check if x in temp
if(x[i] %in% temp){
temp <- append(temp, x[i]) #add to search vector
rl <- rl + 1 #increase length
} else {
period <- append(period, rep(p, rl)) #add to period vector
p <- p + 1 #increase period count
temp <- NULL #reset
rl <- 1 #reset
}
}
#add last batch
rl <- length(x) - length(period)
period <- append(period, rep(p,rl))
df <- data.frame(x,period)
> df
x period
1 1 1
2 1 1
3 1/2 1
4 2 1
5 3 2
6 4 3
7 5/4 3
8 5 3
因此,因爲批1/2包含1&2,2不再是唯一批次嗎?類似於爲什麼5不被認爲是一個獨特的批次? – MikeJewski
是的,確切地說。 1/2包含1和2的部分。對於5/4也是如此。 –
是否有批次包含兩個部分但以前沒有出現過的情況? – mtoto