如何从R语言data数据框提取test配对组合的全排列观测?
解决方法
要从data中提取test指定元素的所有双向配对观测(即A↔B、A↔C、B↔C的所有排列组合),可以用以下两种方法实现:
方法一:生成全排列配对后匹配
先生成test元素的所有有序配对组合,再筛选data中符合条件的行:
# 生成A、B、C的所有非自身有序配对 pairs <- expand.grid(x = test$iso1, y = test$iso1, stringsAsFactors = FALSE) pairs <- pairs[pairs$x != pairs$y, ] # 筛选data中匹配的观测 result <- data[ paste(data$hosp1, data$hosp2) %in% paste(pairs$x, pairs$y), ] print(result)
方法二:用无序配对标识筛选(更简洁)
给每个配对生成一个不区分顺序的标识,再和test的无序配对匹配:
# 为data的每行生成无序配对标识(按字母排序后拼接) data$pair_tag <- apply(data[, c("hosp1", "hosp2")], 1, function(x) paste(sort(x), collapse = "-")) # 生成test中所有无序配对的标识 target_tags <- combn(test$iso1, 2, function(x) paste(sort(x), collapse = "-")) # 筛选匹配行并移除临时标识列 result <- data[data$pair_tag %in% target_tags, !names(data) %in% "pair_tag"] print(result)
注意事项
你提供的data中存在大小写差异(如hosp2里的小写c),如果需要忽略大小写,可以在生成标识前统一转换为大写/小写,例如:
data$hosp1 <- toupper(data$hosp1) data$hosp2 <- toupper(data$hosp2)
内容的提问来源于stack exchange,提问作者user142632
相关产品推荐
相关产品推荐

