2つの列を持つデータフレームがあり、2番目の列に特定の指定された値のセットが含まれているかどうかのブール値となる3番目の列を作成したいと思います。
f <- data.frame(name=c("John", "Sara", "David", "Chad"),
car=c("Honda|Ford", "BMW", "Toyota|Chevy|Ford",
"Toyota|Chevy|Ford|Honda"))
私が最初にしたことは|を削除することでした 2番目の列の各文字列から、値を3番目の列に配置します
library(stringr)
g = str_replace_all(f$car, "[^[:alnum:]]", " ")
f$make = c(g)
f
別の列を作成する場合は、ブール値、makeに一般的な車が含まれている場合は1、一般的でない車が含まれている場合は0を作成します。
common = c("Honda", "Ford", "Toyota", "Chevy")
not_common = c("BMW", "Lexus", "Acura")
ストリンガーパッケージやifelseなど、いくつか試してみて、次の出力を生成しました。
name car make common
1 John Honda|Ford Honda Ford 1
2 Sara BMW BMW 0
3 David Toyota|Chevy|Ford Toyota Chevy Ford 1
4 Chad Toyota|Chevy|Ford|Honda Toyota Chevy Ford Honda 1
エントリとして一般的な車と一般的でない車の両方を含めることができるため、一般的でないメーカーは一般的なメーカーをオーバーライドし、その行は共通の列の値0を取る必要があります。したがって、エントリにBMWとFordの両方が含まれている場合、そのエントリは共通の列で0を取る必要があります。
誰でもこのタスクを手伝ってもらえますか?
ああ、これがストリンガーパッケージで試したものですが、機能しません。
common = c("Honda", "Ford", "Toyota", "Chevy")
not_common = c("BMW", "Lexus", "Acura")
common_match <- str_c(common)
not_match <- str_c(not_common)
main <- function(df) {
f$new_make <- str_detect(f$make, common_match)
df
}
main(f)
ありがとう!