我有一个数据集,看起来如下:
Col1 Col2
1 ABC
2 DEF
3 ABC
1 DEF 预期产出:
Col1 Col2
1 ABC
1 DEF我只想从Col1中提取那些in,它们在列中同时具有ABC和DEF值。
我在SQL中尝试了self-join,但这并没有给出预期的结果。
SELECT DISTINCT Col1
FROM db A, db B
WHERE A.ID <> B.ID
AND A.Col2 = 'ABC'
AND B.Col2 = 'DEF'
GROUP BY A.Col1此外,我在R中尝试使用以下代码进行相同的操作:
vc <- c("ABC", "DEF")
data1 <- db[db$Col2 %in% vc,]同样,我没有得到所需的输出。谢谢你提前给我的指点。
发布于 2018-10-03 06:33:01
下面是您当前的查询更正:
SELECT DISTINCT t1.Col1
FROM yourTable t1
INNER JOIN yourTable t2
ON t1.Col1 = t2.Col1
WHERE t1.Col2 = 'ABC' AND t2.Col2 = 'DEF';
联接条件是两个Col1值是相同的,第一个Col2值是ABC,第二个Col2值是DEF。
但是,我可能会对此使用以下规范方法:
SELECT Col1
FROM yourTable
WHERE Col2 IN ('ABC', 'DEF')
GROUP BY Col1
HAVING MIN(Col2) <> MAX(Col2);发布于 2018-10-03 06:47:19
在R,你可以
library(dplyr)
df %>%
group_by(Col1) %>%
filter(all(vc %in% Col2))
# Col1 Col2
# <int> <fct>
#1 1 ABC
#2 1 DEF 相当于R基的是
df[as.logical(with(df, ave(Col2, Col1, FUN = function(x) all(vc %in% x)))), ]
# Col1 Col2
#1 1 ABC
#4 1 DEF我们选择包含所有vc的组。
发布于 2019-12-05 02:44:32
在R中,我们也可以使用data.table
library(data.table)
setDT(df)[, .SD[all(vc %in% Col2)], by = col1]https://stackoverflow.com/questions/52620832
复制相似问题