Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于计算R中参数之间的行的循环_R - Fatal编程技术网

用于计算R中参数之间的行的循环

用于计算R中参数之间的行的循环,r,R,我需要计算列旅程中“session\u start”行之间的步骤。我想不出如何为这种情况编写循环 df <- data.table( page = c("page_1", "page_2", "page_3", "page_1", "page_2", "page_1", "page_2", "page_3"), journey = c("session_start", NA, NA, "session_start", NA, "session_start", NA, NA)

我需要计算列
旅程
中“session\u start”行之间的步骤。我想不出如何为这种情况编写循环

df <- data.table(
  page = c("page_1", "page_2", "page_3", "page_1", "page_2", "page_1", "page_2", "page_3"),
  journey = c("session_start", NA, NA, "session_start", NA, "session_start", NA, NA)      
)

df这就是你想要的。确保将
stringsAsFactors=F
添加到
数据表中,否则
旅程
列将无法正确处理

for (i in 1:nrow(df)) {
    if (is.na(df$journey[i])) {
        df$journey[i] <- paste('step',step_index,sep='')
        step_index <- step_index + 1
    } else {
        step_index <- 1
    }
}
for(1中的i:nrow(df)){
if(is.na(df$旅程[i])){

df$旅程[i]这正是您想要的。请确保将
stringsAsFactors=F
添加到
数据表中,否则
旅程
列将无法正确处理

for (i in 1:nrow(df)) {
    if (is.na(df$journey[i])) {
        df$journey[i] <- paste('step',step_index,sep='')
        step_index <- step_index + 1
    } else {
        step_index <- 1
    }
}
for(1中的i:nrow(df)){
if(is.na(df$旅程[i])){
df$travely[i]您可以尝试以下方法:

df$journey <- ifelse(df$page == "page_1","session_start", gsub(".*_","step_",df$page))
您可以尝试以下方法:

df$journey <- ifelse(df$page == "page_1","session_start", gsub(".*_","step_",df$page))

使用
ave
尝试此解决方案

i <- df$journey == "session_start"
i[is.na(i)] <- 0L
f <- cumsum(i)
df$journey <- ave(as.character(df$journey), f, FUN = function(s){
  s[is.na(s)] <- paste0("step_", seq_along(s)[-length(s)])
  s
})

i使用
ave
尝试此解决方案

i <- df$journey == "session_start"
i[is.na(i)] <- 0L
f <- cumsum(i)
df$journey <- ave(as.character(df$journey), f, FUN = function(s){
  s[is.na(s)] <- paste0("step_", seq_along(s)[-length(s)])
  s
})
i