在R中为每n行计算出现次数。
问题的出现原因是需要统计在R中每n行出现的次数。解决方法是使用基本的R函数ave。通过创建一个每n个元素的组,并计算每个组中TRUE元素的比例,以及组中所有元素的总数。以下是解决方法的代码示例:
n <- 4 x$b <- ave(x$a, rep(seq(1, nrow(x)), each = n, length.out = nrow(x)), FUN = function(x) sum(x)/length(x)) x # a b #1 FALSE 0.2500000 #2 FALSE 0.2500000 #3 FALSE 0.2500000 #4 TRUE 0.2500000 #5 FALSE 0.5000000 #6 TRUE 0.5000000 #7 TRUE 0.5000000 #8 FALSE 0.5000000 #9 TRUE 0.6666667 #10 TRUE 0.6666667 #11 FALSE 0.6666667
以上代码将在数据框x的列a中创建一个新的列b,并计算每4行的TRUE元素的比例,并将结果存储在列b中。最后,数据框x将包含原始数据和每4行的比例结果。
问题的出现原因:这个问题的出现是因为需要统计R中每n行出现的次数。
解决方法:有几种解决方法可以实现这个目标。一种方法是使用基本R中的ave函数。通过使用gl函数创建一个分组变量,ave函数的默认函数是mean,它可以计算逻辑列'a'的平均值来得到输出。另一种方法是使用data.table包,使用相同的方法,在数据表x中使用setDT函数将数据框转换为数据表,然后使用[.data.table函数通过组合变量grp计算a的平均值,并将结果存储在列b中。最后一种方法是使用dplyr包,通过使用group_by函数和mutate函数来计算每个组中a的平均值,并使用select函数选择需要的列。
下面是完整的代码:
# 使用ave函数 x$b <- with(x, ave(a, as.integer(gl(nrow(x), 4, nrow(x))))) x$b # 使用data.table包 library(data.table) setDT(x)[, b := mean(a), .(grp= as.integer(gl(nrow(x), 4, nrow(x))))] x # 使用dplyr包 library(dplyr) x %>% group_by(grp = as.integer(gl(nrow(x), 4, nrow(x)))) %>% mutate(b = mean(a)) %>% ungroup() %>% select(-grp)
以上是三种不同的方法来统计R中每n行出现的次数。每种方法都有其自己的优势和适用场景,具体使用哪种方法取决于个人的需求和偏好。