我有原始數據,每個單元的唯一標識符與定時混合到列中。爲了「彙總」數據,我需要將每組行的uniqueID附加到列中。 我的循環的一部分已經修剪掉了上面的blurb,然後運行'ifelse'檢查文本,並取得該uniqueID,然後粘貼,直到遇到下一個文本字符串,然後重複。R:有條件替換列值的快速方法
它可以工作,但速度非常慢,我需要通過大量的原始數據重複它。 (我沒有訪問原始軟件來改變輸出文件的形狀。)
通過論壇的閱讀已經找到了替代with a single variable的解決方案,但我需要一種方法從一行中提取它DF。
例DF:
time dist v3 v4
1: 2 10.2 ... ....
2: 3 10.2 ... ....
3: Veh: 123
4: 1 10.2 ... ....
5: 2 10.2 ... ....
6: 3 10.2 ... ....
7: Veh: 456
8: 1 10.2 ... ....
9: 2 10.2 ... ....
v <- 0001
for (m in 1:length(k2$time)) {
if(grepl('Veh', k2$time[m])) {v <- strsplit(k2$time[m], split=":")[[1]][2]} else{ k2$time[m]<-v }
}
通過運行它作爲一個循環,我知道它會工作下來列粘貼,直到它遇到另一個文本字符串。 看起來像這樣的理想結果。
time dist v3 v4
1: 0001 10.2 ... ....
2: 0001 10.2 ... ....
3: Veh: 123
4: 123 10.2 ... ....
5: 123 10.2 ... ....
6: 123 10.2 ... ....
7: Veh: 456
8: 456 10.2 ... ....
9: 456 10.2 ... ....
我再有一個貫穿全data.frame運行並刪除包含文本的行另一行,所以我可以
是任何人都知道一個更快的解決方案,或許用dplyr或data.frame總結?我放棄了922,000行代碼之前放棄了runthrough 15分鐘,我需要它運行數百萬次。
我正在用堆棧溢出的搜索組合。
使用上R-3.3.1
EDIT data.table-1.9.7和dplyr-0.5.0:道歉,可再現例如:
time <- c(1,2,"Veh: 123", 1:3,"Veh: 456", 1:3)
dist <- c(1:2,"",4:6,"",8:10)
v3 <- c(1:2,"",4:6,"",8:10)
k <-data.frame(time,dist,v3)
k$time <- as.character(k$time)
v <- 0001
for (m in 1:length(k$time)) {
if(grepl('Veh', k$time[m])) {v <- strsplit(k$time[m], split=":")[[1]][2] }else{ k$time[m]<-v }}
提示:' grepl()'和'strsplit()'都是矢量化的。這就是我沒有可重複的例子所能做的。 –
[使這是一個可重複的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – shayaa