【发布时间】:2018-01-18 17:33:01
【问题描述】:
我需要一个 R 代码来告诉我每一行中的值是否按字母和数字顺序排列。按字母顺序,我的意思是比较一行中每一列的单元格,从第一个单元格开始到最后一个单元格。一个alphabetical_row = c(A61B, H01J, H03B, G01Q)的例子。
row1 <- c("G01N 23/20", "G01N 23/203", "G01Q 30/00", "G01Q 30/04", "G01Q 30/18", "H01J 37/252", "H01J 37/252")
row2 <- c("G01S 7/38", "G01S 7/38", "H03B 21/00", "H03B 21/02", NA, NA, NA)
row3 <- c("A61B 8/00", "A61B 8/00", "G01S 7/52", "G01S 7/52", NA, NA, NA)
df <- data.frame(rbind(row1, row2, row3))
我正在寻找的输出是一个新列,如果行中的值是有序的,则为 TRUE,如果值不按顺序,则为 FALSE,对于每一行。
但是,让我们从前 4 位开始:
row1 <- c("G01N", "G01N", "G01Q", "G01Q", "G01Q", "H01J", "H01J")
row2 <- c("G01S", "G01S", "H03B", "H03B", NA, NA, NA)
row3 <- c("A61B", "A61B", "G01S", "G01S", NA, NA, NA)
df <- data.frame(rbind(row1, row2, row3))
期望的输出:
df <- data.frame(cbind(df, c(TRUE, TRUE, TRUE)))
在这种情况下,输出将是:FALSE、FALSE、TRUE,因为只有第 3 行按字母顺序排列,从单元格 1 (A61B) 到单元格 4 (G01S)。
【问题讨论】:
-
您可以编辑您的 R 代码语法以使其不会导致错误吗? (另外,也许将
row1重命名为col1...) -
期望输出的例子也很好。字母顺序和数字顺序不同,此输入的示例输出将有助于消除任何混淆。例如,
G01N 23/20按字母顺序在G01N 23/203之前,如果/是字符串的一部分,则在数字上,但如果我们将/视为除法,则在它之后。但是除法没有意义,因为你后面有30/00,你不能除以0。 -
你能提供一个 TRUE 和 FALSE 的例子吗? G01N 23/2 FALSE 是因为在数字上没有排序吗?
-
请解释一下结果的逻辑?从前 4 位数字开始,在我看来每一行都是按字母顺序排列的。例如,第一行,
G01N < G01Q < H01J。N在Q之前,G在H之前。为什么你的结果是FALSE?第 2 行也是按字母顺序排列的,因为G在H之前。
标签: r alphabetical numerical