首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R-计算分配给同一数字的值

R-计算分配给同一数字的值
EN

Stack Overflow用户
提问于 2013-08-26 13:43:40
回答 3查看 102关注 0票数 2

关于这些数据,我有一个问题:

代码语言:javascript
运行
复制
data =
1   time    3
2    20 0
3    20 0
4    20 0
5   350 1
6   350 1
7   350 1
8   10  0
9   20  1
10  37  0
11  37  0
12  50  1
13  50  1
14  40  0
15  40  0
16  40  0

我想总结一下某人花在1上的时间(如第3栏中的索引)。当1被观察时,时间总是分配给总查找时间-所以我只需要总结第一次当1是新指示--大约350 + 20 + 50。

类似于if-loop的:

代码语言:javascript
运行
复制
if (data$3 == 1) {
  sum <- data[:,2] }

不起作用,因为所有的值都会被总结。我需要的东西,总是地址,只有前1后,0。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-26 13:49:36

使用plyr包中的ddply (mydata是您的数据,而col3实际上是数据中的第3列,名为col3 )。

mydata

代码语言:javascript
运行
复制
> mydata
   col1 time col3
1     1   20    0
2     2   20    0
3     3   20    0
4     4  350    1
5     5  350    1
6     6  350    1
7     7   10    0
8     8   20    1
9     9   37    0
10   10   37    0
11   11   50    1
12   12   50    1
13   13   40    0
14   14   40    0
15   15   40    0

library(plyr)
ddply(mydata,.(col3), summarize, mysum=sum(unique(time)))

  col3 mysum
1    0   107
2    1   420
票数 0
EN

Stack Overflow用户

发布于 2013-08-26 14:07:11

代码语言:javascript
运行
复制
data = read.table(text = '
1   time    3
2    20 0
3    20 0
4    20 0
5   350 1
6   350 1
7   350 1
8   10  0
9   20  1
10  37  0
11  37  0
12  50  1
13  50  1
14  40  0
15  40  0
16  40  0
', header = TRUE)

data$first <- sequence(rle(data$time)$lengths)
data

sum(data$time[data$first==1 & data$X3==1])

# [1] 420
票数 0
EN

Stack Overflow用户

发布于 2013-08-26 14:12:20

代码语言:javascript
运行
复制
df2 <- unique(df[df$X3 == 1, c("time", "X3")])
sum(df2$time)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18445653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档