如果前一个元素在R中也是TRUE,那么如何计算数据帧中TRUE语句的数量?

如果前一个元素在R中也是TRUE,那么如何计算数据帧中TRUE语句的数量?,r,conditional-statements,counting,R,Conditional Statements,Counting,我有以下虚拟数据: data <- data.frame(c("FALSE","FALSE","TRUE","TRUE","TRUE","FALSE","FALSE","TRUE","FALSE")) data在向量上写一个简单的循环来计算对的类型怎么样 x在向量上写一个简单的循环来计算对的类型怎么样 x您可以

我有以下虚拟数据:

data <- data.frame(c("FALSE","FALSE","TRUE","TRUE","TRUE","FALSE","FALSE","TRUE","FALSE"))

data在向量上写一个简单的循环来计算对的类型怎么样


x在向量上写一个简单的循环来计算对的类型怎么样


x您可以使用
table
将值与滞后值进行比较:

表格(先前=数据[[1]][-1],当前=数据[[1]][-nrow(数据)])
#>当前
#>以前的假真
#>错误2
#>真实2 2
或者,如果你想变得花哨:

as.data.frame(表(先前=数据[[1]][-1],当前=数据[[1]][-nrow(数据)])
#>以前的当前值
#>1假2假
#>2对错2
#>3假与真2
#>4正确的2

您可以使用
将值与滞后值进行比较:

表格(先前=数据[[1]][-1],当前=数据[[1]][-nrow(数据)])
#>当前
#>以前的假真
#>错误2
#>真实2 2
或者,如果你想变得花哨:

as.data.frame(表(先前=数据[[1]][-1],当前=数据[[1]][-nrow(数据)])
#>以前的当前值
#>1假2假
#>2对错2
#>3假与真2
#>4正确的2

根据数据的大小,循环方法可能会变慢。这是一种
dplyr
方法。可能没有使用
table()
那么快

数据%
分组依据(变量、滞后)%>%
过滤器(完整。案例(滞后))%>%
汇总(计数=n())%>%
变异(标签=粘贴(“n_908;”,as.numeric(var),as.numeric(lag),sep=”“)%>%
选择(标签、计数)

根据数据的大小,循环方法可能会变慢。这是一种
dplyr
方法。可能没有使用
table()
那么快

数据%
分组依据(变量、滞后)%>%
过滤器(完整。案例(滞后))%>%
汇总(计数=n())%>%
变异(标签=粘贴(“n_908;”,as.numeric(var),as.numeric(lag),sep=”“)%>%
选择(标签、计数)

非常感谢,这个循环非常有用!我用更多的数据(大约100个)进行了测试,并手动进行了检查。谢谢!很高兴这有帮助!在这篇文章中有很多好的答案。请选择您最喜欢的并正式“接受”解决方案。非常感谢,此循环非常有用!我用更多的数据(大约100个)进行了测试,并手动进行了检查。谢谢!很高兴这有帮助!在这篇文章中有很多好的答案。请选择您最喜欢的并正式“接受”解决方案。非常感谢您的支持,它还能够输出正确的数字!也非常感谢你的这一个,它还设法输出正确的数字,我正在寻找!还感谢这一个,不幸的是,我相信这里的代码输出的不是其他两个示例。它统计的真实/真实观察值比实际存在的多,而真实/虚假和虚假/真实值较少。这可能是因为将两个向量相加的滞后方法没有考虑到达到TRUE状态时的顺序/方式。@Erich it为每个向量输出2-如值列所示。这正是您在预期输出中显示的内容。你不需要一个循环来解决这个问题。也感谢这一个,不幸的是,我相信这里的代码输出的不是其他两个示例。它统计的真实/真实观察值比实际存在的多,而真实/虚假和虚假/真实值较少。这可能是因为将两个向量相加的滞后方法没有考虑到达到TRUE状态时的顺序/方式。@Erich it为每个向量输出2-如值列所示。这正是您在预期输出中显示的内容。你不需要一个循环来解决这个问题。
data <- data.frame( var = c("FALSE", "FALSE", "TRUE", "TRUE", "TRUE", "FALSE", "FALSE", "TRUE", "FALSE"))
data$var <- as.logical(data$var)
data %>% 
   mutate(lag = lag(var)) %>%
   group_by(var, lag) %>%
   filter(complete.cases(lag)) %>%
   summarise(count = n()) %>%
   mutate(label = paste("n_", as.numeric(var), as.numeric(lag), sep ="")) %>%
   select(label, count)