R函数从以前的行中识别唯一的行,而不是完全在数据帧中
我有一个数据框架,我需要在其中识别或索引每个新试验的开始。新的试验由0-8的可变位置指示。示例如下:R函数从以前的行中识别唯一的行,而不是完全在数据帧中,r,dataframe,logical-operators,unique-index,R,Dataframe,Logical Operators,Unique Index,我有一个数据框架,我需要在其中识别或索引每个新试验的开始。新的试验由0-8的可变位置指示。示例如下: zPos Location 1.9148150 6 1.914815 6 1.914815 6 1.914815 6 1.914815 6 0.9018518 3 0.9018518 3 0.9009259 3 0.9009259 3 0.900925
zPos Location
1.9148150 6
1.914815 6
1.914815 6
1.914815 6
1.914815 6
0.9018518 3
0.9018518 3
0.9009259 3
0.9009259 3
0.9009259 3
0.9009259 3
zPos Location TrialNum
1.9148150 6 1
1.914815 6 1
1.914815 6 1
1.914815 6 1
1.914815 6 1
0.9018518 3 2
0.9018518 3 2
0.9009259 3 2
0.9009259 3 2
0.9009259 3 2
0.9009259 3 2
每个数据帧中有72次试验,因此每个位置值重复8次,这意味着unique将不起作用。谈到R,我是一个新手,所以我没有在BaseR和dplyr之外尝试过很多方法来解决这个问题
理想情况下,我希望为试用编号创建一个新变量,示例如下:
zPos Location
1.9148150 6
1.914815 6
1.914815 6
1.914815 6
1.914815 6
0.9018518 3
0.9018518 3
0.9009259 3
0.9009259 3
0.9009259 3
0.9009259 3
zPos Location TrialNum
1.9148150 6 1
1.914815 6 1
1.914815 6 1
1.914815 6 1
1.914815 6 1
0.9018518 3 2
0.9018518 3 2
0.9009259 3 2
0.9009259 3 2
0.9009259 3 2
0.9009259 3 2
但我也可以使用每个新试验的起始位置索引,而不是数据框中的新变量
这是我关于stackoverflow的第一个问题,因此我非常感谢您的帮助或见解。您可以使用
rle
来完成此操作
df <- data.frame(
zPos = c(1.9148150, 1.914815, 1.914815, 1.914815, 1.914815, 0.9018518,
0.9018518, 0.9009259, 0.9009259, 0.9009259, 0.9009259),
Location = c(6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3)
)
get_trial <- function(col) {
r <- rle(col)
rep(seq(length(r$lengths)), r$lengths)
}
df %>%
mutate(TrialNum = get_trial(Location))
zPos Location TrialNum
1 1.9148150 6 1
2 1.9148150 6 1
3 1.9148150 6 1
4 1.9148150 6 1
5 1.9148150 6 1
6 0.9018518 3 2
7 0.9018518 3 2
8 0.9009259 3 2
9 0.9009259 3 2
10 0.9009259 3 2
11 0.9009259 3 2
df您可以使用rle
来执行此操作
df <- data.frame(
zPos = c(1.9148150, 1.914815, 1.914815, 1.914815, 1.914815, 0.9018518,
0.9018518, 0.9009259, 0.9009259, 0.9009259, 0.9009259),
Location = c(6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3)
)
get_trial <- function(col) {
r <- rle(col)
rep(seq(length(r$lengths)), r$lengths)
}
df %>%
mutate(TrialNum = get_trial(Location))
zPos Location TrialNum
1 1.9148150 6 1
2 1.9148150 6 1
3 1.9148150 6 1
4 1.9148150 6 1
5 1.9148150 6 1
6 0.9018518 3 2
7 0.9018518 3 2
8 0.9009259 3 2
9 0.9009259 3 2
10 0.9009259 3 2
11 0.9009259 3 2
df这可以工作:
df$iTrialNum这可以工作:
df$iTrialNum链接一个可能的副本,它可以为您提供备选方案链接一个可能的副本,它可以为您提供备选方案只有当位置号不重复时(即OP特别希望避免的情况)@erocoar,我相信@Jaap(在我上面共享的链接中)的解决方案可以解决这个问题x只有当位置号不重复(即OP特别想要避免的)时,这才有效@erocoar,我相信@Jaap(在我上面共享的链接中)的解决方案可以解决这个问题x还有data.table::rleid
,它将给出与这里的get\u-trial
相同的输出。还有data.table::rleid
,它将给出与这里的get\u-trial
相同的输出。