R如何计算因子水平的出现

问题描述 投票:0回答:1

我具有以下格式的数据:

ID    Task1   Task2   Task3   Task4
abc   Hard    Hard    Mix     Hard              
xyz   Easy    Mix     Easy    Hard               
als   Mix     Hard    Easy    Hard               
bld   Hard    Mix     Easy    Easy               
cqr   Hard    Easy    Hard    Hard               
alx   Hard    Hard    Hard    Hard               

对于每个ID,我有兴趣分别计算每个因子水平的发生-在这种情况下为Hard,Mix和Easy(请参见下文)。我想对每个ID的每个ID的总出现次数进行计数,然后我也希望对该ID的那个ID的最大连续出现次数进行计数,例如,

ID    Task1   Task2   Task3   Task4   Hard_Total   Max_Consecutive_Hard
abc   Hard    Hard    Mix     Hard    3            2
xyz   Easy    Mix     Easy    Hard    1            1
als   Mix     Hard    Easy    Hard    2            1
bld   Hard    Mix     Easy    Easy    1            1
cqr   Hard    Easy    Hard    Hard    3            2
alx   Hard    Hard    Hard    Hard    4            4

任何人都可以提出解决方案的建议吗?

示例数据的dput()如下。

structure(list(ID = structure(c(1L, 6L, 2L, 4L, 5L, 3L), .Label = c("abc","als", "alx", "bld", "cqr", "xyz"), class = "factor"), Task1 = structure(c(2L, 1L, 3L, 2L, 2L, 2L), .Label = c("Easy", "Hard", "Mix"), class = "factor"), Task2 = structure(c(2L, 3L, 2L, 3L, 1L, 2L), .Label = c("Easy", "Hard", "Mix"), class = "factor"), Task3 = structure(c(3L, 1L, 1L, 1L, 2L, 2L), .Label = c("Easy", "Hard", "Mix"), class = "factor"), Task4 = structure(c(2L, 2L, 2L, 1L, 2L, 2L), .Label = c("Easy", "Hard"), class = "factor")), class = "data.frame", row.names = c(NA, -6L))
r aggregate sequence
1个回答
0
投票

您可以做:

transform(df, Hard_Total = rowSums(df[paste0("Task", 1:4)] == "Hard"),
              Max_Consecutive_Hard = apply(df[paste0("Task", 1:4)], 1, function(x) with(rle(x), max(lengths[values == "Hard"]))))

   ID Task1 Task2 Task3 Task4 Hard_Total Max_Consecutive_Hard
1 abc  Hard  Hard   Mix  Hard          3                    2
2 xyz  Easy   Mix  Easy  Hard          1                    1
3 als   Mix  Hard  Easy  Hard          2                    1
4 bld  Hard   Mix  Easy  Easy          1                    1
5 cqr  Hard  Easy  Hard  Hard          3                    2
6 alx  Hard  Hard  Hard  Hard          4                    4
© www.soinside.com 2019 - 2024. All rights reserved.