比较R中的2个数据集

时间:2011-09-18 02:33:06

标签: r dataset compare extract

我从名为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个数据集并确定它们共享的值。 谢谢,

3 个答案:

答案 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)
)
相关问题