【问题标题】:Count number of rows until a value is reached计算行数,直到达到一个值
【发布时间】:2016-06-27 20:36:48
【问题描述】:

我正在尝试计算行数,直到达到某个值。 这是一个示例数据集:

trialtype <- c(1,1,0,1,1,0,0,1,0,1)
RT <- c(100,200,300,400,500,600,700,800,900,950)
fakedata <- cbind(trialtype,RT)

我想做的是对于每个 trialtype = 0,计算它上面的行数,其中 trialtype = 1 直到它到达列的开头(对于第一个 0)或直到它到达另一个 0(对于其余的 0),并创建一个包含行数的新向量。 所以我对这个数据集的假结果看起来像

x <- c(1,2,3,4)
numones <- c(2,2,0,1)
fakeresults <- cbind(x,numones)

提前致谢!

【问题讨论】:

  • 您的最终cbind 不起作用。当 trialtype==1 时你想要什么?
  • @lmo 我想计算在每个 trialtype == 0 之前出现的 trialtype==1 的行数。所以对于我的假数据,在第一个之前有两个 trialtype == 1 trialtype == 0。对于第二个 trialtype == 0,也有两个 trialtype == 0。但是对于我的第三个 trialtype == 0,有 0 个 trialtype == 1。基本上创建另一个数据帧来跟踪所有此信息。

标签: r count row


【解决方案1】:

首先,使用相等比较和which() 获取零的索引。然后,在索引向量上计算diff() 减一,并在前面加上零以提供第一个索引之前的正确距离。

zis <- which(fakedata[,'trialtype']==0);
data.frame(x=seq_along(zis),numones=diff(c(0L,zis))-1L);
##   x numones
## 1 1       2
## 2 2       2
## 3 3       0
## 4 4       1

这仅在输入列中只有零和一时才有效。如果还有其他值,并且您只对在零之前计数 ones 感兴趣,则需要更复杂的解决方案。

【讨论】:

    猜你喜欢
    • 2021-09-03
    • 2016-02-27
    • 1970-01-01
    • 2019-11-08
    • 2020-12-24
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多