r - 循环 R 中的因子级别 - 如何操作两个连续级别

标签 r loops dataframe dplyr

我需要在 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/

相关文章:

r - 在 R 中给定条件下查找与另一个值最接近的值的位置

r:带有自定义图例和永久显示国名的 Choropleth

javascript - 使用循环的 Node js 和 ejs

java - 单击按钮循环浏览 Jlabel 图像时出现 for 循环问题

r 表达重新编码因子

r - 从浏览器查看我的 Shiny 页面

python - Pandas - 规范化 Json 列表

r - 根据列名是否在字符串向量中为多个列分配值

javascript - 比 switch 语句更好的解决方案

重新组织数据框