【问题标题】:R programming , subsetting data , and plotting graphsR 编程、子集数据和绘图
【发布时间】:2017-04-30 08:22:28
【问题描述】:

R - 我有一个数据框,一列中有 0 和 1,我找到了发生切换的行索引,现在我想通过设置这些特定的行 IDS 从这些索引中抽取数据? 这是数据:

row id   mode 
1          0
2          0
3          1
4          1
5          0
6          0
7          0
8          1
9          1
10         1

拆分数据框后应该有4个新的数据框:

y[1] : 
row id   mode 
1           0
2           0

y[2]
row id     mode 
3            1 
4            1

y[3]
row id      mode 
5            0
6            0
7            0

等等。

【问题讨论】:

标签: r


【解决方案1】:

我们可以根据'mode'中相邻元素的差异和split基于此的数据集创建分组变量

split(df1, cumsum(c(TRUE, diff(df1$mode)!=0)))
#$`1`
#  row id mode
#1      1    0
#2      2    0

#$`2`
#  row id mode
#3      3    1
#4      4    1

#$`3`
#  row id mode
#5      5    0
#6      6    0
#7      7    0

#$`4`
#   row id mode
#8       8    1
#9       9    1
#10     10    1

或者另一种选择是使用来自data.tablerleid

library(data.table)
split(df1, rleid(df1$mode))

或者使用来自base Rrle

split(df1, with(rle(df1$mode), rep(seq_along(values), lengths)))

数据

df1 <- structure(list(`row id` = 1:10, mode = c(0L, 0L, 1L, 1L, 0L, 
0L, 0L, 1L, 1L, 1L)), .Names = c("row id", "mode"),
 class = "data.frame", row.names = c(NA, -10L))

【讨论】:

  • 嘿,非常感谢@akrun,它工作得很好,但我真正想做的是在制作单个数据帧之后,我想在每个数据帧上运行一个 rollapply 函数来获得 min 、 max 、 mean从这些单独的数据帧中,将有另一列称为“表达式”。
  • @VINEETHKUDUVALLI 为此,您无需将其拆分。您可以按操作进行分组。即library(RcppRoll);library(data.table);setDT(df1)[, .(Rmax = roll_max(mode), Rsum = roll_sum(mode), Rmean = roll_mean(mode)), .(grp = rleid(mode))]
  • 所以基本上,我需要表达式的均值、最大值和最小值,所以代替 roll_max(mode) 它将是 roll_max(expression),而在 rleid 函数中它将是 mode。非常感谢您的帮助。干杯。
  • @VINEETHKUDUVALLI 我不清楚。您能否将其发布为具有预期输出的新问题
  • 所以这里是一个新问题的链接,我已经问过了。 stackoverflow.com/questions/43705356/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多