Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 选择两列中部分匹配/不匹配的行_R_Dataframe_Match - Fatal编程技术网

R 选择两列中部分匹配/不匹配的行

R 选择两列中部分匹配/不匹配的行,r,dataframe,match,R,Dataframe,Match,我正在研究如何选择R中两列中部分匹配或不匹配的行。我的数据集(例如)如下所示: df = data.frame(plot1 = c("ABX_15", "BHE_05", "ABX_15"), plot2 = c("AB6_15", "JKS_05", "JKS_05"), value = c(0.4, 0.45, 0.34)) 我想为\u 05和\u 15创建仅包含plot1和plot2的“匹配”对的子集。因此,这将是示例中的

我正在研究如何选择R中两列中部分匹配或不匹配的行。我的数据集(例如)如下所示:

df = data.frame(plot1 = c("ABX_15", "BHE_05", "ABX_15"), 
                plot2 = c("AB6_15", "JKS_05", "JKS_05"),
                value = c(0.4, 0.45, 0.34))
我想为
\u 05
\u 15
创建仅包含
plot1
plot2
的“匹配”对的子集。因此,这将是示例中的第一行或第二行。我还需要只选择在
plot1
plot2
中存在不匹配的行,即第三行。匹配错误匹配仅指绘图名称的第二部分

我已经找到了部分选择和根据列选择某些行的解决方案,但我无法将两者结合起来


我期望数据集有3个子集:一个是匹配的
\u 05
,另一个是匹配的
\u 15
,还有一个是不匹配的。

首先按照模式
\u
将名称分开。我在这里使用的是来自
stringr
包的函数
stru split
。结果是一个列表。现在可以提取名称的第二部分。取消列表后,您可以将结果添加到数据帧
df

df$p1 <- unlist(lapply(str_split(df$plot1, "_"), "[", 2))
df$p2 <- unlist(lapply(str_split(df$plot2, "_"), "[", 2))
结果是:

df[df$p1 == df$p2, ]
   plot1  plot2 value p1 p2
1 ABX_15 AB6_15  0.40 15 15
2 BHE_05 JKS_05  0.45 05 05
对于不匹配使用:

df[df$p1 != df$p2, ]
   plot1  plot2 value p1 p2
3 ABX_15 JKS_05  0.34 05 15

另一种解决方案是使用
sub
从两个变量中去除下划线之前(包括下划线)的所有内容,然后将这些
sub
语句与
=
进行比较,以创建逻辑索引向量:

idx <- sub('.*\\_', '', df$plot1) == sub('.*\\_', '', df$plot2)
要获取不匹配项,可以使用
df[!idx,]

   plot1  plot2 value
3 ABX_15 JKS_05  0.34

根据您的需求更新,您可以在
15
05
上创建匹配索引,如下所示:

idx15 <- sub('.*\\_', '', df$plot1) == '15' & sub('.*\\_', '', df$plot2) == '15'
idx05 <- sub('.*\\_', '', df$plot1) == '05' & sub('.*\\_', '', df$plot2) == '05'

idx15预期的输出是什么?我预期数据集有3个子集:一个匹配_05,另一个匹配_15,还有一个匹配_15missmatches@NR不要在评论中发布其他信息,请利用下次更新您的问题。Thak’s for your update-我刚刚回答了评论中的问题。您的解决方案的调整不是问题。我做的有点不同,但它似乎也能工作:
id05
   plot1  plot2 value
3 ABX_15 JKS_05  0.34
idx15 <- sub('.*\\_', '', df$plot1) == '15' & sub('.*\\_', '', df$plot2) == '15'
idx05 <- sub('.*\\_', '', df$plot1) == '05' & sub('.*\\_', '', df$plot2) == '05'