R - 根据另一列中的值查找时间戳的开始和结束
R - Find the begin and the end of timestamp according with values in another column
亲爱的,
我是R编程的新手,因此,我来这里向您寻求帮助。我正在想办法解决这个问题。我一直在努力,但没有成功。
我有一个data.frame类似的...
df2 <- data.frame(Recordig = c("Rec1", "Rec1", "Rec1", "Rec1", "Rec1", "Rec1",
"Rec2","Rec2","Rec2","Rec2","Rec2","Rec2"),
MediaName = c("Imagem1","Imagem1","Imagem1",
"Estimulo1","Estimulo1","Estimulo1",
"Imagem1","Imagem1","Imagem1",
"Estimulo1","Estimulo1","Estimulo1"),
Timestamp = c( 4975 , 5155 , 5312 ,25076, 25463 ,26040 , 5035 , 5248, 5551, 17047 , 17263, 17533))
下面是简化版
Recordig MediaName Timestamp
1 Rec1 Imagem1 4975
2 Rec1 Imagem1 5155
3 Rec1 Imagem1 5312
4 Rec1 Estimulo1 25076
5 Rec1 Estimulo1 25463
6 Rec1 Estimulo1 26040
7 Rec2 Imagem1 5035
8 Rec2 Imagem1 5248
9 Rec2 Imagem1 5551
10 Rec2 Estimulo1 17047
11 Rec2 Estimulo1 17263
12 Rec2 Estimulo1 17533
我的意思是什么?我需要确切地知道参与者(例如 Rec1)在查看每张图像 (Image1) 上花费了多少时间。在这种情况下,Image1 的时间戳从 4.975 秒开始到 5.312 秒结束,给出 333 毫秒
重点是我有数百张图片和数千名受访者,他们花了不同的时间来观察这些图片。
请问有没有人能帮帮我?
您可以使用 dplyr
包找到每个参与者 (Recordig
) 和图像 (MediaName
) 的第一个和最后一个时间戳之间的差异:
library(dplyr)
df3 <- df2 %>%
dplyr::group_by(Recordig, MediaName) %>%
dplyr::summarise(duration = diff(range(Timestamp)))
df3
# Source: local data frame [4 x 3]
# Groups: Recordig [?]
#
# Recordig MediaName duration
# <fctr> <fctr> <dbl>
# 1 Rec1 Estimulo1 964
# 2 Rec1 Imagem1 337
# 3 Rec2 Estimulo1 486
# 4 Rec2 Imagem1 516
我们可以使用base R
aggregate(cbind(duration = Timestamp) ~Recordig + MediaName, df2,
FUN = function(x) diff(range(x)))
# Recordig MediaName duration
#1 Rec1 Estimulo1 964
#2 Rec2 Estimulo1 486
#3 Rec1 Imagem1 337
#4 Rec2 Imagem1 516
亲爱的,
我是R编程的新手,因此,我来这里向您寻求帮助。我正在想办法解决这个问题。我一直在努力,但没有成功。
我有一个data.frame类似的...
df2 <- data.frame(Recordig = c("Rec1", "Rec1", "Rec1", "Rec1", "Rec1", "Rec1",
"Rec2","Rec2","Rec2","Rec2","Rec2","Rec2"),
MediaName = c("Imagem1","Imagem1","Imagem1",
"Estimulo1","Estimulo1","Estimulo1",
"Imagem1","Imagem1","Imagem1",
"Estimulo1","Estimulo1","Estimulo1"),
Timestamp = c( 4975 , 5155 , 5312 ,25076, 25463 ,26040 , 5035 , 5248, 5551, 17047 , 17263, 17533))
下面是简化版
Recordig MediaName Timestamp
1 Rec1 Imagem1 4975
2 Rec1 Imagem1 5155
3 Rec1 Imagem1 5312
4 Rec1 Estimulo1 25076
5 Rec1 Estimulo1 25463
6 Rec1 Estimulo1 26040
7 Rec2 Imagem1 5035
8 Rec2 Imagem1 5248
9 Rec2 Imagem1 5551
10 Rec2 Estimulo1 17047
11 Rec2 Estimulo1 17263
12 Rec2 Estimulo1 17533
我的意思是什么?我需要确切地知道参与者(例如 Rec1)在查看每张图像 (Image1) 上花费了多少时间。在这种情况下,Image1 的时间戳从 4.975 秒开始到 5.312 秒结束,给出 333 毫秒
重点是我有数百张图片和数千名受访者,他们花了不同的时间来观察这些图片。
请问有没有人能帮帮我?
您可以使用 dplyr
包找到每个参与者 (Recordig
) 和图像 (MediaName
) 的第一个和最后一个时间戳之间的差异:
library(dplyr)
df3 <- df2 %>%
dplyr::group_by(Recordig, MediaName) %>%
dplyr::summarise(duration = diff(range(Timestamp)))
df3
# Source: local data frame [4 x 3]
# Groups: Recordig [?]
#
# Recordig MediaName duration
# <fctr> <fctr> <dbl>
# 1 Rec1 Estimulo1 964
# 2 Rec1 Imagem1 337
# 3 Rec2 Estimulo1 486
# 4 Rec2 Imagem1 516
我们可以使用base R
aggregate(cbind(duration = Timestamp) ~Recordig + MediaName, df2,
FUN = function(x) diff(range(x)))
# Recordig MediaName duration
#1 Rec1 Estimulo1 964
#2 Rec2 Estimulo1 486
#3 Rec1 Imagem1 337
#4 Rec2 Imagem1 516