如何解决如何检查一列是否为 r 中的重复故意序列?
我有一个数据框 (mdata -> 2106796 x 3),其中有一列名为“wavelength”。此列具有从 350 到 1349、1401 到 1799 和 1951 到 2999 的数字序列(从 350 到 2999 排除了一些数字)。我正在随机检查数据,我观察到特定“ID”的某些“波长”向后计数,从 2999 到 350(上面提到的所有缺失数字)。我找到了一种使用以下代码克服此问题的方法:
mdata <- mdata %>% arrange(targt_ID,wavelength)
现在我想检查(例如:TRUE 或 FALSE)我是否仍然有一些正常格式或反向的“波长”序列(这对其他相同的数据帧很有用)。
这是我的数据的样子(大部分):
目标 ID | ID | 波长 |
---|---|---|
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”中):
目标 ID | ID | 波长 |
---|---|---|
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
意味着一行中的每个值都是
高于前一行中的值,在一个 ID 的值范围内。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。