我从名为babies2009的数据集中提取了2个数据集(3个向量计数,名称,性别)
一个是女孩2009,包含所有女孩和其他男孩2009。 我想知道男孩和女孩之间有什么相似的名字。
我试过这个
common.names = (boys2009$name %in% girls2009$name)
当我尝试
时babies2009[common.names, ] [1:10, ]
我得到的只是女孩名字而不是通用名字。
我已经确认这两个数据集确实包含男孩和女孩,分别采取10个样本......
boys2009 [1:10,]
girsl2009 [1:10,]
我如何比较2个数据集并确定它们共享的值。 谢谢,
答案 0 :(得分:5)
common.names = (boys2009$name %in% girls2009$name)
为您提供长度为length(boys2009$name)
的逻辑向量。因此,当您尝试从更长的data.frame babies2009[common.names, ] [1:10, ]
中进行选择时,最终会产生废话。
解决方案:在正确的data.frame上使用该逻辑向量!
boys2009 <- data.frame( names=c("Billy","Bob"),data=runif(2), gender="M" , stringsAsFactors=FALSE)
girls2009 <- data.frame( names=c("Billy","Mae","Sue"),data=runif(3), gender="F" , stringsAsFactors=FALSE)
babies2009 <- rbind(boys2009,girls2009)
common.names <- (boys2009$name %in% girls2009$name)
> boys2009[common.names, ]$names
[1] "Billy"
答案 1 :(得分:2)
由于您需要相似性但未指定完全匹配,因此您应该考虑agrep
sapply(boys2009$name , agrep, girls2009$name, max = 0.1)
您可以调整max.distance参数以满足您的需求。
答案 2 :(得分:1)
如何使用set functions:
list(
`only boys` = setdiff(boys2009$name, girls2009$name),
`common` = intersect(boys2009$name, girls2009$name),
`only girls` = setdiff(girls2009$name, boys2009$name)
)