从上一个交互R中提取值

从上一个交互R中提取值,r,R,假设我有以下data.frame: df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"), trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4)) 我们可以使用lag(假设订购了“试用版”) 我们可以使用lag(假设订购了“试用版”) 下面是一个使用for循环的解决方案: df <- data.frame(color = c(

假设我有以下data.frame:

df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
           trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))

我们可以使用
lag
(假设订购了“试用版”)


我们可以使用
lag
(假设订购了“试用版”)


下面是一个使用
for
循环的解决方案:

df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
                 trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))

# iterate through trial numbers
for (trial in unique(df$trial)) {
  # select color of previous trial number
  prev_color <-  as.character(df$color[df$trial == trial - 1])[1] 

  # assign previous color to current trial number
  df$prevcolor[df$trial == trial] <- prev_color
}
df

##   color trial prevcolor
##1      G     1      <NA>
##2      G     1      <NA>
##3      G     1      <NA>
##4      R     2         G
##5      R     2         G
##6      R     2         G
##7      R     3         R
##8      R     3         R
##9      R     3         R
##10     R     3         R
##11     G     4         R
##12     G     4         R

df这里有一个使用
for
循环的解决方案:

df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
                 trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))

# iterate through trial numbers
for (trial in unique(df$trial)) {
  # select color of previous trial number
  prev_color <-  as.character(df$color[df$trial == trial - 1])[1] 

  # assign previous color to current trial number
  df$prevcolor[df$trial == trial] <- prev_color
}
df

##   color trial prevcolor
##1      G     1      <NA>
##2      G     1      <NA>
##3      G     1      <NA>
##4      R     2         G
##5      R     2         G
##6      R     2         G
##7      R     3         R
##8      R     3         R
##9      R     3         R
##10     R     3         R
##11     G     4         R
##12     G     4         R

df这里有另一个解决方案,使用R中的一个简单的
merge
函数。 您的数据帧:

df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
                 trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))
现在为您的输出创建一个新的数据帧:

newdf<-data.frame(color=df$color,trial=df$trial,prevtrial=df2$prevtrial,prevcolor=df2$color)
newdf newdf
颜色试验prevtrial prevcolor
1G10
2G10
3g10
4R21g
5R21g
6R21g
7 R 3 2 R
8 R 3 2 R
9 R 3 2 R
10 R 3 2 R
11 G 4 3 R
12 G 4 3 R
> 

下面是另一个解决方案,它使用了R中的一个简单的
合并
函数。 您的数据帧:

df <- data.frame(color = c("G","G","G","R","R","R","R","R","R","R","G","G"),
                 trial = c(1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4))
现在为您的输出创建一个新的数据帧:

newdf<-data.frame(color=df$color,trial=df$trial,prevtrial=df2$prevtrial,prevcolor=df2$color)
newdf newdf
颜色试验prevtrial prevcolor
1G10
2G10
3g10
4R21g
5R21g
6R21g
7 R 3 2 R
8 R 3 2 R
9 R 3 2 R
10 R 3 2 R
11 G 4 3 R
12 G 4 3 R
> 

in(df,prevcolor
in(df,prevcolor)for循环在R中如此之慢,真是遗憾。
df2<-merge(data.frame(prevtrial=c(df$trial-1)),unique(df), by.x="prevtrial",by.y="trial",all.x=T)
newdf<-data.frame(color=df$color,trial=df$trial,prevtrial=df2$prevtrial,prevcolor=df2$color)
> newdf
   color trial prevtrial prevcolor
1      G     1         0      <NA>
2      G     1         0      <NA>
3      G     1         0      <NA>
4      R     2         1         G
5      R     2         1         G
6      R     2         1         G
7      R     3         2         R
8      R     3         2         R
9      R     3         2         R
10     R     3         2         R
11     G     4         3         R
12     G     4         3         R
>