我需要在 R data.frame 中循环因子级别。在循环内部,我需要对包含由这些级别对定义的子集的 data.frames 进行操作。这些对是该因素的两个连续的唯一级别。
这是我尝试过的示例:
require(dplyr)
df <- data.frame(fac = rep(c("A", "B", "C"), 3))
for(i in levels(fac)){
if(i != levels(fac)[length(levels(fac))]){
df %>% filter(fac %in% c(i, i + 1))
}
}
我尝试有级别
i
及其后续级别包括但明显的表达i + 1
不会做的伎俩。如何解决这个问题?我是否必须制作变量 fac
数字还是有更简洁的解决方案?编辑:输出(对于这个例子)应该是这两个 data.frames:
dfAB <- df %>% filter(fac %in% c("A", "B"))
dfBC <- df %>% filter(fac %in% c("B", "C"))
最佳答案
问题是,你遍历所有级别的 fac,这是一个字符向量,因此 R
不能加 1 到 i
.
以下工作:
library(dplyr)
df <- data.frame(fac = rep(c("A", "B", "C"), 3))
df <- df %>%
mutate(fac = factor(fac, levels = c("A", "B", "C")))
for(i in seq_along(levels(df$fac))){
if(i != length(levels(df$fac))){
df %>% filter(fac %in% c(levels(fac)[i], levels(fac)[i+1])) %>% print()
}
}
# fac
# 1 A
# 2 B
# 3 A
# 4 B
# 5 A
# 6 B
# fac
# 1 B
# 2 C
# 3 B
# 4 C
# 5 B
# 6 C
fac
列必须是 factor
(否则过滤不起作用)。我添加了
print()
在循环内打印结果,但您可能希望将其存储在某处(例如在列表中)。
关于r - 循环 R 中的因子级别 - 如何操作两个连续级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48460004/