J'ai une colonne people$food
qui contient des entrées telles que chocolate
ou Apple-orange-strawberry
.
Je veux diviser people$food
par -
et obtenir la première entrée de la scission.
En python, la solution serait food.split('-')[0]
, mais je ne trouve pas d'équivalent pour R.
Si vous devez extraire la première entrée (ou nth
) de chaque division, utilisez:
Word <- c('Apple-orange-strawberry','chocolate')
sapply(strsplit(Word,"-"), `[`, 1)
#[1] "Apple" "chocolate"
Ou plus rapide et plus explicite:
vapply(strsplit(Word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "Apple" "chocolate"
Les deux bits de code se débrouillent bien avec la sélection de la valeur de la liste scindée et traitent les cas non compris dans la plage:
vapply(strsplit(Word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA
Par exemple
Word <- 'Apple-orange-strawberry'
strsplit(Word, "-")[[1]][1]
[1] "Apple"
ou équivalent
unlist(strsplit(Word, "-"))[1].
L'idée est essentiellement que split
donne une liste en conséquence, dont les éléments doivent être accessibles soit en découpant (le premier cas), soit en défaisant (le dernier).
Si vous souhaitez appliquer la méthode à une colonne entière:
first.Word <- function(my.string){
unlist(strsplit(my.string, "-"))[1]
}
words <- c('Apple-orange-strawberry', 'orange-juice')
R: sapply(words, first.Word)
Apple-orange-strawberry orange-juice
"Apple" "orange"
J'utiliserais plutôt sub()
. Puisque vous voulez le premier "mot" avant la scission, nous pouvons simplement tout supprimer après le premier -
et c'est ce qui nous reste.
sub("-.*", "", people$food)
Voici un exemple -
x <- c("Apple", "banana-raspberry-cherry", "orange-berry", "tomato-Apple")
sub("-.*", "", x)
# [1] "Apple" "banana" "orange" "tomato"
Sinon, si vous voulez utiliser strsplit()
, vous pouvez arrondir les premiers éléments avec vapply()
vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "Apple" "banana" "orange" "tomato"
Je suggérerais d'utiliser head
plutôt que [
dans R.
Word <- c('Apple-orange-strawberry','chocolate')
sapply(strsplit(Word, "-"), head, 1)
# [1] "Apple" "chocolate"
dplyr/magrittr
approche:
library(magrittr)
library(dplyr)
Word = c('Apple-orange-strawberry', 'chocolate')
strsplit(Word, "-") %>% sapply(extract2, 1)
# [1] "Apple" "chocolate"