Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.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 在忽略NA'的情况下,计算每个ID的访问量(总和);s和0';s_R_Na_Cumsum - Fatal编程技术网

R 在忽略NA'的情况下,计算每个ID的访问量(总和);s和0';s

R 在忽略NA'的情况下,计算每个ID的访问量(总和);s和0';s,r,na,cumsum,R,Na,Cumsum,我有以下建议: df <- data.frame(ID = c(1,1,2,2,2,3,3,3,3), Attendance = c(1, 1, NA, 1,1, NA, 1, NA, 1 )) df我们可以使用data.table。将“data.frame”转换为“data.table”(setDT(df)),按“ID”分组,将i指定为逻辑向量,这对于“Attention”中的非NA元素是正确的,将(:=)attention的“rowid”指定为“Vi

我有以下建议:

df <- data.frame(ID = c(1,1,2,2,2,3,3,3,3),
                 Attendance = c(1, 1, NA, 1,1, NA, 1, NA, 1 ))

df我们可以使用
data.table
。将“data.frame”转换为“data.table”(
setDT(df)
),按“ID”分组,将
i
指定为逻辑向量,这对于“Attention”中的非NA元素是正确的,将(
:=
)attention的“rowid”指定为“Visit”列。然后,将“访问”中的NA替换为0

library(data.table)
setDT(df)[!is.na(Attendance), Visit := rowidv(Attendance), 
                   ID][is.na(Visit), Visit := 0]
df
#   ID Attendance Visit
#1:  1          1     1
#2:  1          1     2
#3:  2         NA     0
#4:  2          1     1
#5:  2          1     2
#6:  3         NA     0
#7:  3          1     1
#8:  3         NA     0
#9:  3          1     2

或者,如果我们使用的是
ave
,则为非NA行创建索引,然后对这些行使用
ave

i1 <- !is.na(df$Attendance)
df$Visit <- 0
df$Visit[i1] <- with(df[i1, ], ave(Attendance, ID, FUN = cumsum))

i1我们可以使用
data.table
。将“data.frame”转换为“data.table”(
setDT(df)
),按“ID”分组,将
i
指定为逻辑向量,这对于“Attention”中的非NA元素是正确的,将(
:=
)attention的“rowid”指定为“Visit”列。然后,将“访问”中的NA替换为0

library(data.table)
setDT(df)[!is.na(Attendance), Visit := rowidv(Attendance), 
                   ID][is.na(Visit), Visit := 0]
df
#   ID Attendance Visit
#1:  1          1     1
#2:  1          1     2
#3:  2         NA     0
#4:  2          1     1
#5:  2          1     2
#6:  3         NA     0
#7:  3          1     1
#8:  3         NA     0
#9:  3          1     2

或者,如果我们使用的是
ave
,则为非NA行创建索引,然后对这些行使用
ave

i1 <- !is.na(df$Attendance)
df$Visit <- 0
df$Visit[i1] <- with(df[i1, ], ave(Attendance, ID, FUN = cumsum))
i1
i1 <- !is.na(df$Attendance)
df$Visit <- 0
df$Visit[i1] <- with(df[i1, ], ave(Attendance, ID, FUN = cumsum))
library(dplyr)
df %>%
    group_by(ID) %>%
    mutate(Visit = if_else(is.na(Attendance), 0, cumsum(if_else(is.na(Attendance), 0, 1))))