Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R函数从以前的行中识别唯一的行,而不是完全在数据帧中_R_Dataframe_Logical Operators_Unique Index - Fatal编程技术网

R函数从以前的行中识别唯一的行,而不是完全在数据帧中

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

我有一个数据框架,我需要在其中识别或索引每个新试验的开始。新的试验由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.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
相同的输出。