chocolate
や_people$food
_などのエントリを含む列_Apple-orange-strawberry
_があります。
_people$food
_を_-
_で分割し、分割から最初のエントリを取得します。
Pythonでは、解決策はfood.split('-')[0]
ですが、Rに相当するものが見つかりません.
各分割から最初の(またはnth
)エントリを抽出する必要がある場合は、次を使用します。
Word <- c('Apple-orange-strawberry','chocolate')
sapply(strsplit(Word,"-"), `[`, 1)
#[1] "Apple" "chocolate"
またはより速く、より明確に:
vapply(strsplit(Word,"-"), `[`, 1, FUN.VALUE=character(1))
#[1] "Apple" "chocolate"
コードの両方のビットは、分割リスト内のいずれかの値の選択にうまく対処し、範囲外のケースを処理します。
vapply(strsplit(Word,"-"), `[`, 2, FUN.VALUE=character(1))
#[1] "orange" NA
例えば
Word <- 'Apple-orange-strawberry'
strsplit(Word, "-")[[1]][1]
[1] "Apple"
または、同等に
unlist(strsplit(Word, "-"))[1].
基本的に、split
は結果としてリストを提供し、その要素はスライス(前者の場合)またはリスト解除(後者)のいずれかによってアクセスする必要があるという考え方です。
メソッドを列全体に適用する場合:
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"
代わりにsub()
を使用します。分割前に最初の「Word」が必要なので、最初の_-
_の後のすべてを単純に削除することができます。それが残っています。
_sub("-.*", "", people$food)
_
以下に例を示します-
_x <- c("Apple", "banana-raspberry-cherry", "orange-berry", "tomato-Apple")
sub("-.*", "", x)
# [1] "Apple" "banana" "orange" "tomato"
_
それ以外の場合、strsplit()
を使用する場合は、vapply()
で最初の要素を切り上げることができます
_vapply(strsplit(x, "-", fixed = TRUE), "[", "", 1)
# [1] "Apple" "banana" "orange" "tomato"
_
Rで[
ではなくhead
を使用することをお勧めします。
Word <- c('Apple-orange-strawberry','chocolate')
sapply(strsplit(Word, "-"), head, 1)
# [1] "Apple" "chocolate"
dplyr/magrittr
アプローチ:
library(magrittr)
library(dplyr)
Word = c('Apple-orange-strawberry', 'chocolate')
strsplit(Word, "-") %>% sapply(extract2, 1)
# [1] "Apple" "chocolate"