从表列的每个值中选择最长的字符串

问题描述 投票:0回答:1

我有以下日期范围:

TXID 团体
HUDJDUDOOD--银行2--OLDODOLD985555545UIJF 1
UJDID YUH23498 IDX09 2
854 UIJSAZXC 3

我希望能够为列下的每个值提取最长的字符串

ID TX
知道每个单元格可能有不同的字符串或者可能只有一个,但在某些情况下它们可能由标点符号分隔,例如
"," "--", "," "--"
等或甚至一个空间
" ".

我想到了以下内容,我需要首先用空格替换标点符号

" "
,然后..用
" "
分隔或分割每个单元格,之后我可能会用
nchart()
str_length()计算每个字符串的长度
并选择最长值的字符串索引,但我还无法这样做,因为我无法在分割值后选择我需要的索引(单词),因为我不知道在哪个索引中最长的字符串可能是..我想要的输出是:

输出
OLDODOLD985555545UIJF
YUH23498
UIJSAZXC

旁注:不用担心,不会有关系。

r stringr data-wrangling
1个回答
0
投票
# 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

© www.soinside.com 2019 - 2024. All rights reserved.