我有一个工作表,其中有两列Potential time zones: [Antarctica/McMurdo, Pacific/Niue, Pacific/Samoa, Pacific/Tongatapu, Pacific/Enderbury, Etc/GMT+11, NZ, Antarctica/South_Pole, Etc/GMT-13, Pacific/Pago_Pago, Pacific/Midway, Pacific/Fakaofo, US/Samoa, Pacific/Auckland]
Ambiguous date, candidates are [2019-10-03, 2019-10-02]
和A
,如图中所示,它们的条目之间用逗号(B
)隔开。
我想在R中逐个单元比较这2行,以便仅在以下情况下才返回1(,
)
图像的“结果”列中给出了预期的示例输出。
我在R中使用过match命令,但它只为第2行而不是第5行返回1(TRUE
),第5行具有相同的条目,但顺序不同。
有人可以建议R中的任何软件包或函数来帮助我做到这一点(最好是没有循环的解决方案),因为我想在具有数千行的数据集上使用它。
答案 0 :(得分:1)
这应该有帮助:
# 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
这样的函数sort(trimws(unlist(strsplit(x,","))))
。
答案 1 :(得分:0)
这里是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 <- structure(list(A = c("1,ab", "1,x,df"), B = c("2,ab", "1,df,x"
)), class = "data.frame", row.names = c(NA, -2L))