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-"