循环通过csv文件

时间:2017-03-29 18:24:11

标签: r

我对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),无论何时用户成功。我该怎么办?我需要为每个用户执行此操作,因为我将使用这些数字执行某些操作。

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)

由此,您将获得每个用户的首次失败和成功