从 table 列的每个值中选择最长的字符串
Selecting longest string from each value of table column
大家好,希望你们过得愉快,
我有以下日期范围:
ID TX
GROUP
HUDJDUDOOD--BANNK2--OLDODOLD985555545UIJF
1
UJDID YUH23498 IDX09
2
854 UIJSAZXC
3
我希望能够为列 ID TX
下的每个值提取最长的字符串,因为我知道每个单元格可能有不同的字符串,或者可能只有一个,但在某些情况下,它们可能由标点符号分隔,例如作为 "," "--", "," "--"
等甚至 space " ".
我想到了以下我需要先用白色 space " "
替换标点符号然后.. 用 " "
分隔或拆分每个单元格 然后我会计算每个字符串的长度可能 nchart()
或 str_length()
和 select 字符串的索引是最长的值,但我还不能这样做,因为我无法管理 select 拆分值后我需要的索引(单词),因为我不知道最长的字符串可能在哪个索引中。我想要的输出是:
OUTPUT
OLDODOLD985555545UIJF
YUH23498
UIJSAZXC
旁注:不用担心不会有关系。
非常感谢你们的帮助,我会非常警觉地奖励你们的回复!
# Your data
dat <- structure(list(ID_TX = c("HUDJDUDOOD--BANNK2--OLDODOLD985555545UIJF",
"UJDID YUH23498 IDX09", "854 UIJSAZXC"), GROUP = 1:3), class = "data.frame", row.names = c(NA,
-3L))
# Splitting strings in the data
spl <- strsplit(dat$ID_TX, "--|\s")
# Identify the position of the longest string in each row
idx <- spl|> lapply(nchar) |> lapply(which.max) |> unlist()
# Select the longest string and bind them to a data.frame
mapply(function(x,y) spl[[x]][y], seq_along(idx),idx) |>
as.data.frame() |>
setNames("OUTPUT")
# The result
# OUTPUT
#1 OLDODOLD985555545UIJF
#2 YUH23498
#3 UIJSAZXC
大家好,希望你们过得愉快,
我有以下日期范围:
ID TX | GROUP |
---|---|
HUDJDUDOOD--BANNK2--OLDODOLD985555545UIJF | 1 |
UJDID YUH23498 IDX09 | 2 |
854 UIJSAZXC | 3 |
我希望能够为列 ID TX
下的每个值提取最长的字符串,因为我知道每个单元格可能有不同的字符串,或者可能只有一个,但在某些情况下,它们可能由标点符号分隔,例如作为 "," "--", "," "--"
等甚至 space " ".
我想到了以下我需要先用白色 space " "
替换标点符号然后.. 用 " "
分隔或拆分每个单元格 然后我会计算每个字符串的长度可能 nchart()
或 str_length()
和 select 字符串的索引是最长的值,但我还不能这样做,因为我无法管理 select 拆分值后我需要的索引(单词),因为我不知道最长的字符串可能在哪个索引中。我想要的输出是:
OUTPUT |
---|
OLDODOLD985555545UIJF |
YUH23498 |
UIJSAZXC |
旁注:不用担心不会有关系。
非常感谢你们的帮助,我会非常警觉地奖励你们的回复!
# Your data
dat <- structure(list(ID_TX = c("HUDJDUDOOD--BANNK2--OLDODOLD985555545UIJF",
"UJDID YUH23498 IDX09", "854 UIJSAZXC"), GROUP = 1:3), class = "data.frame", row.names = c(NA,
-3L))
# Splitting strings in the data
spl <- strsplit(dat$ID_TX, "--|\s")
# Identify the position of the longest string in each row
idx <- spl|> lapply(nchar) |> lapply(which.max) |> unlist()
# Select the longest string and bind them to a data.frame
mapply(function(x,y) spl[[x]][y], seq_along(idx),idx) |>
as.data.frame() |>
setNames("OUTPUT")
# The result
# OUTPUT
#1 OLDODOLD985555545UIJF
#2 YUH23498
#3 UIJSAZXC