R 在不考虑顺序的情况下,将一行单元格中的所有元素与另一行单元格中的所有元素进行比较
我有一个工作表,有两列R 在不考虑顺序的情况下,将一行单元格中的所有元素与另一行单元格中的所有元素进行比较,r,excel,comparison,match,rstudio,R,Excel,Comparison,Match,Rstudio,我有一个工作表,有两列a和B,如图所示,它们的条目用逗号分隔(,)。 我想在R中逐单元格比较这两行,这样它只在以下情况下返回1(TRUE) 当两行中的所有条目都匹配时 比较时不考虑顺序(图中第5行) 图像的结果列中给出了预期输出的示例。 我在R中使用了match命令,但它只为第2行返回1(True),而不是第5行,第5行的条目相同,但顺序不同 有人能推荐R中的任何包或函数来帮助我做到这一点(最好是没有循环的解决方案),因为我想在有数千行的数据集上使用它 这应该有助于: # example dat
a
和B
,如图所示,它们的条目用逗号分隔(,
)。
我想在R中逐单元格比较这两行,这样它只在以下情况下返回1(TRUE
)
True
),而不是第5行,第5行的条目相同,但顺序不同
有人能推荐R中的任何包或函数来帮助我做到这一点(最好是没有循环的解决方案),因为我想在有数千行的数据集上使用它
这应该有助于:
# example data
dt = data.frame(A = c("1,ab", "1,x,df"),
B = c("2,ab", "1,df,x"),
stringsAsFactors = F)
# vectorised function to check matches
ff = function(x,y) as.numeric(identical(sort(unlist(strsplit(x,","))),
sort(unlist(strsplit(y,",")))))
ff = Vectorize(ff)
# apply function
dt$Result = ff(dt$A, dt$B)
dt
# A B Result
# 1 1,ab 2,ab 0
# 2 1,x,df 1,df,x 1
如果逗号后可能有一些空格,可以使用函数
trimws
,如上面函数中的排序(trimws(unlist(strsplit(x,“,”))
。这里有一个tidyverse
library(tidyverse)
rownames_to_column(dt, 'rn') %>%
separate_rows(A, B) %>%
group_by(rn) %>%
summarise(Result = as.integer(all(sort(A) == sort(B)))) %>%
select(Result) %>%
bind_cols(dt, .)
数据
dt请使用dput()
添加数据。
dt <- structure(list(A = c("1,ab", "1,x,df"), B = c("2,ab", "1,df,x"
)), class = "data.frame", row.names = c(NA, -2L))