当前位置: 首页 > 知识库问答 >
问题:

参数“模式”的长度>1,并且只会使用第一个元素-GSUB()

南宫博简
2023-03-14

我有以下问题。

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

如何创建一个名为<code>word</code>的新列,其中仅包含<code>col2</code<中未出现的值?

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

共有3个答案

韩照
2023-03-14

您可以像这样使用mapplypastestrsplit

table$word <- mapply(function(x, y) paste(y[!(y %in% x)], collapse=" "),
                     strsplit(as.character(table$col1), split=" "),
                     strsplit(as.character(table$col2), split=" "))

这里,<code>strsplit</code>在“”上拆分一个字符向量并返回一个列表。这两个列表被馈送到mapply,它检查每个列表的对应值,并返回不在第一个列表中的第二个列表的值。生成的矢量与paste及其折叠参数粘贴在一起。

它返回

table
      col1            col2      word
1 cars1 gm cars1 motor mel motor mel
2 cars2 gl  cars2 prom del  prom del
邓令雪
2023-03-14

您可以使用< code>mapply,

#Make sure you read your data with stringsAsFactors = FALSE, 
table<-data.frame(col1=c("cars1 gm","cars2 gl"),
                  col2=c("cars1 motor mel", "cars2 prom del"), stringsAsFactors = FALSE)

table$word <- mapply(function(x, y) 
                     trimws(gsub(sapply(strsplit(x, ' '), paste, collapse = '|'), '', y)), 
                     table$col1, table$col2)
table
#      col1            col2      word
#1 cars1 gm cars1 motor mel motor mel
#2 cars2 gl  cars2 prom del  prom del
夏振国
2023-03-14

您可以使用 gsub 构建查找,然后应用列以执行感兴趣的 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)
 类似资料: