如何使用for循环查找数据帧中的特定字符串?

如何使用for循环查找数据帧中的特定字符串?,r,R,我使用for循环查找另一个数据帧(df1$x1)中的所有特定字符串(df2$x2),我的目的是创建新列df1$test并写入df$x2值 例如: df1 <- data.frame(x1 = c("TE-T6-3 XYZ12X","TE-D31L-2 QWE12X","TE-H6-1 ABC12X","TE-D31L-2 QWE12X","EC20 QWX12X"), Y = c(2017,2017,2018,2018,2017),

我使用for循环查找另一个数据帧(df1$x1)中的所有特定字符串(df2$x2),我的目的是创建新列df1$test并写入df$x2值

例如:

df1 <- data.frame(x1 = c("TE-T6-3 XYZ12X","TE-D31L-2 QWE12X","TE-H6-1 ABC12X","TE-D31L-2 QWE12X","EC20 QWX12X"),
                  Y = c(2017,2017,2018,2018,2017),
                  Sales = c(25,50,30,40,90))
df1$x1 <- as.character(as.factor(df1$x1))

df2 <- data.frame(x2 = c("TE-T6-5","TE-D31L-2","TE-H6-15","EC500","EC20","TE-D31L-2"),
                  Y = c(2018,2017,2018,2017,2018,2018),
                  P = c(100,300,200,50,150,300))
df2$x2 <- as.character(as.factor(df2$x2))

for(i in 1:nrow(df2)){

  f <- df2[i,1]

  df1$test <- ifelse(grepl(f, df1$x1),f,"not found")

}

df1您只需在空格上拆分
df1$x1
字符串,并在
df2$x2
上合并(或
match
,因为您只对一个变量感兴趣),即

v1 <- sub('\\s+.*', '', df1$x1)
v1[match(v1, df2$x2)]
#[1] NA          "TE-D31L-2" NA          "TE-D31L-2" "EC20"

v1是否希望每个字符串有一个新列?如果这是您需要的,那么您的代码应该是:

df1 <- data.frame(x1 = c("TE-T6-3 XYZ12X","TE-D31L-2 QWE12X","TE-H6-1 ABC12X","TE-D31L-2 QWE12X","EC20 QWX12X"),
                  Y = c(2017,2017,2018,2018,2017),
                  Sales = c(25,50,30,40,90))
df1$x1 <- as.character(as.factor(df1$x1))

df2 <- data.frame(x2 = c("TE-T6-5","TE-D31L-2","TE-H6-15","EC500","EC20","TE-D31L-2"),
                  Y = c(2018,2017,2018,2017,2018,2018),
                  P = c(100,300,200,50,150,300))
df2$x2 <- as.character(as.factor(df2$x2))

for(i in 1:nrow(df2)){

  f <- df2[i,1]
  df1$test <- ""
  df1$test<-ifelse(grepl(f, df1$x1),T,F)
  colnames(df1) <- c(colnames(df1[1:length(df1[1,])-1]),f)

}

df1您能否通过向我们展示清晰的输入和预期输出来重新表述您的问题?您预期的输出是什么?我编辑过。清楚吗?还有其他更优雅的解决方案,我试图改变您的策略,并尽可能少地编写代码。仅供参考,无需在
grepl
中使用
ifelse
。如果它存在,它将生成
TRUE
,如果不存在,则生成
FALSE
谢谢,但我需要的是一个新列,如上图所示或预期输出。这就是我想要的!非常感谢。非常感谢。我知道并使用过,但给出的例子很简单。实际上,弦有两个以上的空格,有时它们的位置不稳定。所以,我认为for-loop方法将是一种很好的方法。你们需要在你们的问题中包含类似的东西。明确地解释你的问题,提及任何角落的案例。否则,对我们俩来说都是浪费时间!
df1 <- data.frame(x1 = c("TE-T6-3 XYZ12X","TE-D31L-2 QWE12X","TE-H6-1 ABC12X","TE-D31L-2 QWE12X","EC20 QWX12X"),
                  Y = c(2017,2017,2018,2018,2017),
                  Sales = c(25,50,30,40,90))
df1$x1 <- as.character(as.factor(df1$x1))

df2 <- data.frame(x2 = c("TE-T6-5","TE-D31L-2","TE-H6-15","EC500","EC20","TE-D31L-2"),
                  Y = c(2018,2017,2018,2017,2018,2018),
                  P = c(100,300,200,50,150,300))
df2$x2 <- as.character(as.factor(df2$x2))

for(i in 1:nrow(df2)){

  f <- df2[i,1]
  df1$test <- ""
  df1$test<-ifelse(grepl(f, df1$x1),T,F)
  colnames(df1) <- c(colnames(df1[1:length(df1[1,])-1]),f)

}
df1 <- data.frame(x1 = c("TE-T6-3 XYZ12X","TE-D31L-2 QWE12X","TE-H6-1 ABC12X","TE-D31L-2 QWE12X","EC20 QWX12X"),
                  Y = c(2017,2017,2018,2018,2017),
                  Sales = c(25,50,30,40,90))
df1$x1 <- as.character(as.factor(df1$x1))

df2 <- data.frame(x2 = c("TE-T6-5","TE-D31L-2","TE-H6-15","EC500","EC20","TE-D31L-2"),
                  Y = c(2018,2017,2018,2017,2018,2018),
                  P = c(100,300,200,50,150,300))
df2$x2 <- as.character(as.factor(df2$x2))
df1$output <- "not found"

for(i in 1:nrow(df2)){
  f <- df2[i,1]
  df1$output[grepl(f, df1$x1)]<-f

}