r - 检查列是否按降序排列

标签 r

我想检查 X 列是否按降序排列,以及 X 列中是否有两个相同的值,看看是否按 Y 列中字母的字母顺序打破了联系。

这是我目前所拥有的,没有返回任何东西:

for (ii in 1:length(data_frame)) {
    if (ii == 1 | ii == length(data_frame)) {
      next
    } 
    else if (data_frame[["columnX"]][ii] == data_frame[["columnX"]][ii+1]) {
      ifelse(!is.unsorted(data_frame[["columnY"]][c(ii,ii+1)]),
             return(TRUE), 
             return(FALSE))
    }
  }

编辑:dput()

structure(list(Count = c(8184L, 8046L, 7988L, 7970L, 7771L, 7755L, 
7730L, 7650L, 7557L, 7428L), Name = c("Mary", "John", "Mary", 
"Mary", "Mary", "Robert", "Mary", "Mary", "John", "Mary")), .Names = c("Count", 
"Name"), row.names = c(4533L, 130862L, 3830L, 2456L, 6700L, 130863L, 
3150L, 5965L, 114094L, 5269L), class = "data.frame")

最佳答案

使用dplyr 的解决方案可以使用leadsummarise 来实现。

方法是先找出当前行和下一行之间的差异。如果该差异大于 0,则表示 递减顺序。如果差异为 0,则检查 Name 列(当前与下一个)的字母顺序比较将决定 递减 顺序。

最后,如果 DecOrder 的所有值都在 TRUE 中,则表示 Count 是降序排列。

library(dplyr)
df %>% mutate(DiffCount = Count - lead(Count, default=0)) %>%
  mutate(DecOrder = ifelse(DiffCount == 0, Name > lead(Name), DiffCount > 0)) %>%
  summarise(IsDesc = all(DecOrder))

#Result
#  IsDesc
#1   TRUE

数据

df <- structure(list(Count = c(8184L, 8046L, 7988L, 7970L, 7771L, 7755L, 
7730L, 7650L, 7557L, 7428L), Name = c("Mary", "John", "Mary", 
"Mary", "Mary", "Robert", "Mary", "Mary", "John", "Mary")), .Names = c("Count", 
"Name"), row.names = c(4533L, 130862L, 3830L, 2456L, 6700L, 130863L, 
3150L, 5965L, 114094L, 5269L), class = "data.frame")

关于r - 检查列是否按降序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472864/

相关文章:

r - 不同组中不重复 R 的样本百分比

c++ - 尝试在 SET_VECTOR_ELT 中设置索引 0/0

r - 如何获取 R 中的解析列然后检查匹配?

r - 计算时间序列矩阵的近似熵

r - 使用 Leaflet 的交互式美国县 map

r - 在行之间应用函数,按变量分组,计算其他列中变量之间的所有可能组合

C++ 和 R 接口(interface),获取输出

r - 从函数调用将变量传递给 ggpubr

r - 创建序列组合

r - 从R中的mongodb查询多个id