Je souhaite effectuer des opérations sur une liste de caractères dans R comme décrit ci-dessous:
Exemple en Python
['YOKU', 'LUOJ', 'KAWA'] # in Python
c('YOKU', 'LUOJ', 'KAWA') # in R
Résultat attendu
lt = ['LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki']
[str(x).split('-')[1][:4].upper().ljust(4, 'J') for x in lt]
4 Réponses :
En utilisant le package stringr (dans tidyverse), vous pouvez faire quelque chose comme ceci.
library(tidyverse)
lt = c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')
##If you want lower case
new_1 <- str_to_lower(str_sub(str_replace(lt, "^.*-",""),start = 1, end = 4))
new_1
##If you want upper case
new_2 <- str_to_upper(str_sub(str_replace(lt, "^.*-",""),start = 1, end = 4))
new_2
Une solution utilisant stringr (et l'opération pipe de magrittr).
library(magrittr)
library(stringr)
lt <- c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')
lt2 <- lt %>%
str_extract(pattern = "(?<=-)[A-Za-z]*") %>% # Extract letters after -
str_sub(start = 1, end = 4) %>% # Get four letters
str_pad(width = 4, pad = "J", side = "right") %>% # Add J at the end
str_to_upper() # To lower case
lt2
# [1] "YOKU" "LUOJ" "KAWA"
En supposant que le préfixe est toujours le même, vous pouvez le faire dans la ligne unique str_sub (lt, 5, 8)%>% str_pad (4, "j", side = "right")%>% str_to_upper code>.
@SymbolixAU Mis à jour. Merci!
Une approche de base R:
> x <- c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')
> x1 <- toupper(substr(x,5,8))
> ifelse(nchar(x1) == 3,paste0(x1,"J"),x1)
[1] "YOKU" "LUOJ" "KAWA"
@Parfait C'est pourquoi j'ai demandé dans un commentaire ci-dessus si nous pouvions supposer que les chaînes commençaient toujours par "LTA-" et que l'OP semblait impliquer que nous pouvions. Mais oui, sans cette hypothèse, vous devrez faire quelque chose de différent.
Pensez à suivre la solution non en boucle dans la base R
lt = c('LTA-Yokudo', 'LTA-Luo', 'LTA-Kawasaki')
n <- toupper(substr(lt, regexpr('-', lt)+1, regexpr('-', lt)+4))
ifelse(nchar(n)==3, paste0(n, 'J'), n)
# [1] "YOKU" "LUOJ" "KAWA"
utilisez reticulate et appelez votre code python dans r;)
Pouvez-vous supposer que la partie avant le
-comporte toujours 3 caractères?@joran: Oui, nous pouvons supposer que le préfixe sera toujours "LTA-"