如何检查列是否为 r 中的重复(故意)序列?

how to check if a column as a repeated (deliberate) sequence in r?

我有一个数据框 (mdata -> 2106796 x 3),其中有一列名为“波长”。此列具有从 350 到 1349、1401 到 1799 和 1951 到 2999 的数字序列(从 350 到 2999 排除了一些数字)。我正在随机检查数据,我观察到特定“ID”的某些“波长”从 2999 到 350 倒数(上面提到的所有缺失数字)。我找到了一种使用此代码解决此问题的方法: mdata <- mdata %>% arrange(targt_ID, wavelength)

现在我想检查(例如:TRUE 或 FALSE)我是否还有一些正常格式或反向格式的“波长”序列(这对其他相同的数据帧很有用)。

这是我的数据(大部分)的样子:

targt_ID ID wavelength
1 c1 350
1 c1 351
1 c1 352
1 c1 ...
1 c1 2998
1 c1 2999
2 c2 350
2 c2 351
2 c2 352
2 c2 ...
2 c2 2998
2 c2 2999
........ .. ....

这是我的数据的样子(在特定的“ID”中):

targt_ID ID wavelength
46 t5 2999
46 t5 2998
46 t5 2997
46 t5 ...
46 t5 351
46 t1 350
47 t7 2999
47 t7 2998
47 t7 2997
47 t7 ...
47 t7 351
47 t7 350
........ .. ....

任何帮助将不胜感激。

您大可放心,arrange() 会给您想要的结果。如果您想仔细检查,请参阅以下代码:

library(tidyverse)

# Create some unsorted data, resembling your original data.
unsorted_data <-
  tibble(ID = gl(5, 3),
         value = sample(350:2999, 15))

# Here we create a "lagged" variable of the values, that lets us compare  
# the value in each row with the value of the previous row. `going_up` stores
# the result of the conditional of `value` being bigger than `lagged` (previous value.).

unsorted_data %>% 
  group_by(ID) %>% 
  mutate(lagged = lag(value),
         going_up = value > lagged) %>% 
  filter(!is.na(going_up)) %>% # Filter out the first row for each ID.
  pull(going_up) %>% 
  all()
#> [1] FALSE

计算结果为 FALSE,因为某些值小于 上一行中的值。

sorted_data <-
  unsorted_data %>%
  arrange(ID, value)

sorted_data %>% 
  group_by(ID) %>% 
  mutate(lagged = lag(value),
         going_up = value > lagged) %>% 
  filter(!is.na(going_up)) %>% 
  pull(going_up) %>% 
  all()
#> [1] TRUE

第二个结果的计算结果为 TRUE,这意味着一行中的每个值都是 高于上一行的值,在一个 ID 的值内。