1. ホーム
  2. r

[解決済み] 引数 'pattern' の長さが > 1 で、最初の要素だけが使用される - GSUB()

2022-02-03 23:46:27

質問

次のような問題があります。

table <- data.frame(col1 = c("cars1 gm", "cars2 gl"), col2 = c("cars1 motor mel", "cars2 prom del"))

      col1            col2
1 cars1 gm cars1 motor mel
2 cars2 gl  cars2 prom del

table$word <- gsub(table$col1, ' ', table$col2) 

Warning message:  In gsub(table$col1, " ", table$col2) :  argument
'pattern' has length > 1 and only the first element will be used

という新しいカラムを作成するにはどうしたらよいでしょうか。 word の値のみを含む col2 に現れないもの。 col1 ?

      col1            col2       word
1 cars1 gm cars1 motor mel  motor mel
2 cars2 gl  cars2 prom del   prom del

解決方法は?

を使用することができます。 gsub を使用してルックアップを構築し、その後 sapply を実行するためにカラムの上に gsub を使用します。

table$col1 <- gsub(" ", "|", table$col1)
table$word <- sapply(1:nrow(table), function(x) gsub(table$col1[x], "", table$col2[x]))

table
#      col1            col2       word
#1 cars1|gm cars1 motor mel  motor mel
#2 cars2|gl  cars2 prom del   prom del


上記の回答と似たような考え方で mapply の代わりに sapply :

table$word <- mapply(function(x, y) gsub( gsub(" ", "|", x), "", y),
                                    table$col1,
                                    table$col2)