首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R:基于条件的两种data.frames的比较与过滤

R:基于条件的两种data.frames的比较与过滤
EN

Stack Overflow用户
提问于 2014-09-23 17:38:17
回答 1查看 2.2K关注 0票数 3

我有一个data.frame data_qual,它看起来像这样:

代码语言:javascript
运行
复制
data_qual <- structure(list(NAME = structure(1:3, .Label = c("NAME1", "NAME2", "NAME3"), class = "factor"), ID = c(56L, 47L, 77L), YEAR = c(1990L, 2007L, 1899L), VALUE = structure(c(2L, 1L, 1L), .Label = c("ST", "X"), class = "factor")), .Names = c("NAME", "ID", "YEAR", "VALUE"), class = "data.frame", row.names = c(NA, -3L))

 NAME   ID YEAR    VALUE
1 NAME1 56 1990     X
2 NAME2 47 2007    ST
3 NAME3 77 1899    ST

我希望将data_qual的值与另一个数据格式dat进行比较,从而筛选出它的值。

代码语言:javascript
运行
复制
dat <- structure(list(NAME = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L), .Label = c("NAME1","NAME2"), class = "factor"), ID = c(56L, 56L, 56L, 47L, 47L, 47L, 47L), YEAR = c(1988L, 1989L, 1991L, 2005L, 2006L, 2007L, 2008L), VALUE = c(45L, 28L, 28L, -12L, 14L, 23L, 32L)), .Names = c("NAME", "ID", "YEAR", "VALUE"), class = "data.frame", row.names = c(NA, -7L))

  NAME  ID YEAR   VALUE
1 NAME1 56 1988    45
2 NAME1 56 1989    28
3 NAME1 56 1991    28
4 NAME2 47 2005   -12
5 NAME2 47 2006    14
6 NAME2 47 2007    23
7 NAME2 47 2008    32

如何基于列data_qual IDID进行筛选,以便在第一次筛选过程中只将行写入具有与dat匹配的ID的新data.frame

代码语言:javascript
运行
复制
   NAME ID YEAR VALUE
1 NAME1 56 1990     X
2 NAME2 47 2007    ST

然后,我正在寻找一种方法,从产生的data.frame中只写出每个组不具有相同YEAR的行(如ID所定义)。

代码语言:javascript
运行
复制
   NAME ID YEAR VALUE
1 NAME1 56 1990     X

如有任何帮助,敬请见谅。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 19:57:50

第一部分

代码语言:javascript
运行
复制
dat2 <- data_qual[data_qual$ID %in% dat$ID, ]
dat2
   NAME ID YEAR VALUE
1 NAME1 56 1990     X
2 NAME2 47 2007    ST

然后在第二部分

代码语言:javascript
运行
复制
good_rows <- lapply(paste(dat2$ID, dat2$YEAR, sep = ":"), grepl, x = paste(dat$ID, dat$YEAR, sep = ":"))
dat3 <- dat2[!unlist(lapply(good_rows, any)), ]

或者如果这对你来说太麻烦了,一个for循环

代码语言:javascript
运行
复制
good_rows <- vector(length = nrow(dat2))
for (i in 1:nrow(dat2)) {
   good_rows[i] <- !any(grepl(dat2$YEAR[i], dat[dat$ID == dat2$ID[i], "YEAR"]))
}
dat3 <- dat2[good_rows, ]
dat3
   NAME ID YEAR VALUE
1 NAME1 56 1990     X
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26001354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档