从上一个交互R中提取值
假设我有以下data.frame:从上一个交互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(
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,prevcolorin(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
>