我有原始数据,每个单元的唯一标识符与定时混合到列中。为了“汇总”数据,我需要将每组行的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