Tijd nummer schaap code Modifier comment status
1 2.971 1 stilstaan <NA> NA START
2 5.457 1 ruiken aan object NA POINT
3 10.703 1 stilstaan <NA> NA STOP
4 10.704 1 lopen <NA> NA START
5 12.959 1 lopen <NA> NA STOP
6 12.960 1 stilstaan <NA> NA START
7 22.732 1 ruiken aan object NA POINT
8 29.383 1 stilstaan <NA> NA STOP
9 29.384 1 lopen <NA> NA START
10 42.568 1 lopen <NA> NA STOP
11 42.569 1 ruiken aan object NA POINT
12 49.206 1 lopen <NA> NA START
13 66.533 1 lopen <NA> NA STOP
14 66.534 1 stilstaan <NA> NA START
15 67.134 1 ruiken aan object NA POINT
16 72.999 1 stilstaan <NA> NA STOP
17 73.000 1 lopen <NA> NA START
18 77.480 1 lopen <NA> NA STOP
19 77.481 1 stilstaan <NA> NA START
20 81.773 1 rondkijken <NA> NA START
我是一名从事实习的行为生物学学生,我一直用R来做我的统计数据,但我真的不知道如何做我现在想做的事情。这个数据框包含我的观察结果(荷兰语),我想计算多少次&#34; stilstaan&#34;之后是&#34; ruiken&#34;使用修饰符&#34; aan object&#34;。我一直无法找到办法完全按照自己的意愿行事。我可以计算次数&#34; stilstaan&#34;之后是&#34; ruiken&#34;使用下面的代码,但我不知道如何包含修饰符。有没有办法做到这一点,还是我要求不可能?
S=Excel_bestand_schapen
seq=c("stilstaan", "ruiken")
library(zoo)
result=rollapply(S, 2, identical, seq)
length(result[result == TRUE])
答案 0 :(得分:1)
我们可以使用以下代码来过滤符合要求的行。 lead
可以向前移动整个向量。这个数据集的答案是三个。
library(dplyr)
dat2 <- dat %>%
filter(code %in% "stilstaan" & lead(code) %in% "ruiken" & lead(Modifier) %in% "aan object")
nrow(dat2)
# [1] 3
数据强>
dat <- read.table(text = " Tijd 'nummer schaap' code Modifier comment status
1 2.971 1 stilstaan NA NA START
2 5.457 1 ruiken 'aan object' NA POINT
3 10.703 1 stilstaan NA NA STOP
4 10.704 1 lopen NA NA START
5 12.959 1 lopen NA NA STOP
6 12.960 1 stilstaan NA NA START
7 22.732 1 ruiken 'aan object' NA POINT
8 29.383 1 stilstaan NA NA STOP
9 29.384 1 lopen NA NA START
10 42.568 1 lopen NA NA STOP
11 42.569 1 ruiken 'aan object' NA POINT
12 49.206 1 lopen NA NA START
13 66.533 1 lopen NA NA STOP
14 66.534 1 stilstaan NA NA START
15 67.134 1 ruiken 'aan object' NA POINT
16 72.999 1 stilstaan NA NA STOP
17 73.000 1 lopen NA NA START
18 77.480 1 lopen NA NA STOP
19 77.481 1 stilstaan NA NA START
20 81.773 1 rondkijken NA NA START",
header = TRUE, stringsAsFactors = FALSE)
答案 1 :(得分:0)
使用base R和www的dat-data-frame:
sum(ifelse((dat$code == "stilstaan") &
(c(dat$code[2:length(dat$code)], NA) == "ruiken") &
(c(dat$Modifier[2:length(dat$Modifier)], NA) == "aan object"),
1, 0))
答案 2 :(得分:0)
您可以将相关列折叠为单个字符串
collapse <- paste(paste(dat$code, dat$Modifier), collapse=" ")
# [1] "stilstaan NA ruiken aan object stilstaan NA lopen ...
定义您要搜索的模式
pattern <- "stilstaan NA ruiken aan object"
使用stringr::str_count
来计算匹配数
stringr::str_count(pattern, collapse)
# 3