我想在R

时间:2019-08-21 16:11:57

标签: r loops dataframe

问题

我想根据df1中的数据创建一个循环,这很重要,因为数据一次获得一个ID值。

我不确定如何用R做到这一点。

#original dataset
id=c(1,1,1,2,2,2,3,3,3)
dob=c("11-08","12-04","04-03","10-04","03-07","06-02","12-09","01-01","03-08")
count=c(1,6,3,2,5,6,8,6,4)
outcome=rep(1:0,length.out=9)
df1=data.frame(id,dob,count,outcome)

#changes for each value this needs to be completed separately for each value
df2<-df1[df1$id==1,]
df2<-df2[,-4]
addition<-df2$count+45
df2<-cbind(df2,addition)

df3<-df1[df1$id==2,]
df3<-df3[,-4]
addition<-df3$count+45
df3<-cbind(df3,addition)

df4<-df1[df1$id==3,]
df4<-df4[,-4]
addition<-df4$count+45
df4<-cbind(df4,addition)

df5<-rbind(df2,df3,df4)

预期产量

df5<-rbind(df2,df3,df4)


1   1   11-08   1   46
2   1   12-04   6   51
3   1   04-03   3   48
4   2   10-04   2   47
5   2   03-07   5   50
6   2   06-02   6   51
7   3   12-09   8   53
8   3   01-01   6   51
9   3   03-08   4   49

1 个答案:

答案 0 :(得分:1)

在当前情况下(可能是一个简化的示例),它甚至不需要循环,因为我们可以直接在数字上添加“计数”

df1$addition <- df1$count + 45

但是,如果这是一个复杂的操作,需要单独查看'id',则执行group_by操作

library(dplyr)
df1 %>% 
   group_by(id) %>% 
   mutate(addition = count + 45)
# A tibble: 9 x 5
# Groups:   id [3]
#     id dob   count outcome addition
#  <dbl> <fct> <dbl>   <int>    <dbl>
#1     1 11-08     1       1       46
#2     1 12-04     6       0       51
#3     1 04-03     3       1       48
#4     2 10-04     2       0       47
#5     2 03-07     5       1       50
#6     2 06-02     6       0       51
#7     3 12-09     8       1       53
#8     3 01-01     6       0       51
#9     3 03-08     4       1       49

此外,data.table语法也将

library(data.table)
setDT(df1)[, addition := count + 45, by = id]

或简单地

setDT(df1)[, addition := count + 45]