【问题标题】:For loops in R for data compilation [duplicate]R中用于数据编译的循环[重复]
【发布时间】:2017-03-09 07:32:08
【问题描述】:

我有一个数据框,其中有一列填充了 0 和 1。以下是该数据的示例:

0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 0  ... etc. 

我需要格式化数据,以便计算连续 0 和 1 的数量,如下所示:

0  -  5
1  -  4
0  -  10
1  -  3
0  -  1
1  -  2
0  -  4

我是 R 新手,不知道该怎么做,但下面是我在 JavaScript 中的做法。我希望得到一些关于如何在 R 中复制此结果的指导。提前感谢您的帮助!

var data = [0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0];
var result = [];

for (var i = 0; i < data.length; i++) {
  var item = {};
  item[data[i]] = 1;
  if (!result.length) {
    result.push(item);
  } else {
    var lastItem = result[result.length - 1];
    if (lastItem[data[i]]) {
      lastItem[data[i]] += 1;
    } else {
      result.push(item);
    }
  }
}

console.log(result)

【问题讨论】:

  • 幸好你正在迁移到 R。试试rle(x)
  • @PierreLafortune 哈哈,谢谢,我也是 JavaScript 新手,所以这可能不是最有效的方法!我如何将其转换为表/数据框/矩阵?我试过 matrix(unlist ( rle(data) ), ncol = 2, byrow = TRUE) 但这不太对。
  • * 我想转换它以便于查看,因为我有超过一百万个观察值。
  • 我添加了一个编辑
  • 谢谢! @PierreLafortune,效果很好!

标签: javascript r for-loop append


【解决方案1】:

有一个功能。 rle 计算向量中每个元素的运行长度。输出有两部分,运行的长度和值本身:

rle(x)
#Run Length Encoding
#  lengths: int [1:7] 5 4 10 3 1 2 4
#  values : int [1:7] 0 1 0 1 0 1 0

要创建一个矩阵,我们可以使用:

with(rle(x), cbind(values, lengths))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 2020-10-23
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2018-01-05
    • 2015-08-15
    • 2015-10-26
    相关资源
    最近更新 更多