我对R和Rstudio很新。我要做的是循环 csv 文件。
该文件有3列。 1)用户2)事件(成功或失败)3)randNum
因此,基本上每个用户都会以失败开始,一旦他们成功,就会转移到下一个用户。
例如:
user: | event: | randNum
user1 | fail | 6
user1 | fail | 4
user1 | fail | 1
user1 | success | 2
user2 | ... |
基本上我需要做的就是这个。我需要存储第一个随机数(6)和最后一个随机数(2),无论何时用户成功。我该怎么办?我需要为每个用户执行此操作,因为我将使用这些数字执行某些操作。
答案 0 :(得分:3)
最快捷的方法是使用table
获取计数:
table(df$user)
示例代码:
> df <- data.frame(user=c(rep("john",4),rep("jane",3)), event=c(rep("failed",3), "success", rep("failed",2), "success"))
> df
user event
1 john failed
2 john failed
3 john failed
4 john success
5 jane failed
6 jane failed
7 jane success
> table(df$user)
jane john
3 4
编辑:要解决您所做的最新修改,这些修改大大改变了问题:
> df <- data.frame(user=c(rep("john",4),rep("jane",3)), event=c(rep("failed",3), "success", rep("failed",2), "success"), randNum=c(4,6,1,2,9,3,5))
> library(dplyr)
> df <- df %>% group_by(user) %>% mutate(trial = 1:n())
> df[df$trial==1 | df$event=="success",]
Source: local data frame [4 x 4]
Groups: user [2]
user event randNum trial
<fctr> <fctr> <dbl> <int>
1 john failed 4 1
2 john success 2 4
3 jane failed 9 1
4 jane success 5 3
答案 1 :(得分:1)
如果每个用户最终都成功,并且您想要考虑每个用户的第一行和最后一行,请尝试以下代码:
df<-split(df,df$user)
df<-lapply(df,function(x){
x<-rbind(head(x,1),tail(x,1))
x
})
df<-do.call("rbind",df)
由此,您将获得每个用户的首次失败和成功