我确定之前已经发布了类似的问题,但没有一个答案我找不到特定于我的查询的答案。
我有以下代码检查第2列中的每一行是否为“STRT”,如果找不到该值,则会复制上一行中第3列中的值。目前这个程序运行时间超过1小时,因为我有一个行数超过300,000的数据集。
for (i in 1:nrow(RTable)) {
if (RTable[i,2] != "STRT") {
RTable[i,3] <- RTable[i-1,3]
}
}
理想情况下,我希望有一个看起来像这样的解决方案
ifelse(RTable $ col2!=“STRT”,RTable $ col3 [当前行] = RTable $ col3 [当前行-1]
任何帮助将不胜感激。在此先感谢您的帮助!!!
答案 0 :(得分:2)
创建临时变量
RTable$col4<-lag(RTable$col3)
根据需要使用ifelse
library(dplyr)
RTable %>% mutate(col3=ifelse(col2!="STRT",col3,col4))
答案 1 :(得分:1)
我们可以使用setDT(RTable)
。转换&#39; data.frame&#39;到&#39; data.table&#39; (lag
),创建&#39; col3&#39;的shift
使用:=
(&#34; col4&#34;),并指定(col2
)&#39; col4&#39;的值到&#39; col3&#39;其中library(data.table)
setDT(RTable)[, col4 := shift(col3)][col2!="STRT", col3 := col4]
不等于&#34; STRT&#34;。
function print(str) {
$("#result").append("<p>" + str + "</p>");
}
print(["A", "B", "C"].join()); // "A,B,C"
print(["A", "B", "C"].join("-")); // "A-B-C"
print(["A", "B", "C"].join("||")); // "A||B||C"
print(["A", "B", "C"].join("")); // "ABC"
答案 2 :(得分:0)
可能会创建第四列,这是您的第三列移位,然后使用您的ifelse
声明:
a = c(0,0,0,0) # just so the column indices match to yours
x = c(1,2,3,4)
y = c(2,3,4,5)
RTable = data.frame(a,x,y)
RTable[,4] = c(0,RTable[-nrow(RTable),3]) # Delete last value in column and add one to the beginning
# ifelse(RTable$col2 != "STRT", RTable$col3, RTable$col4)
我不知道您数据的限制,但这是一个选项。