我有一个数据集,我希望在第一个观察年中删除第一个月的几个人的出现。 有可能用ifelse做到这一点吗? 就像是:

ifelse(ID=="1" & Month=="11" and Year=="2006", "remove these rows",  
  ifelse(ID=="2" & Month=="11" & Year=="2007", "remove these rows",   
         "nothing"))  

一如既往,所有帮助赞赏! :)

#1楼 票数:9 已采纳

如果你想要的只是一个指示器,你甚至不需要ifelse()

ind <- (Month == "11") &
           ((ID == "1" & Year == "2006") | (ID == "2" & Year == "2007"))

如果Month"11"并且其他两个子条款中的任何一个为TRUE,则ind将包含TRUE

然后你可以通过[subset()在任何子集操作中使用!ind删除这些样本。

dat <- data.frame(ID = rep(c("1","2"), each = 72),
                  Year = rep(c("2006","2007","2008"), each = 24),
                  Month = rep(as.character(1:12), times = 3))
ind <- with(dat, (Month == "11") & ((ID == "1" & Year == "2006") |
                                    (ID == "2" & Year == "2007")))
ind
dat2 <- dat[!ind, ]

这使

R> ind
  [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
 [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
 [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
 [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
[109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE
[121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
[133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
R>     dat2 <- dat[!ind, ]
R> nrow(dat)
[1] 144
R> nrow(dat2)
[1] 140

这在示例数据方面是正确的/

#2楼 票数:2

一种data.table解决方案,它将data.table时间和内存(并且编码少)。 它适用于数据集。

如果列是整数,而不是因子

library(data.table)
DT <- data.table(ID = rep(1:2, each = 72),
          Year = rep(2006:2008, each = 24),
          Month = rep(1:12, times = 3))
# or you could use:   DT <- as.data.table(dat)
setkey(DT,ID,Year,Month)
DT[-DT[J(1:2,2006:2007,11),which=TRUE]]

  ask by ego_ translate from so

未解决问题?本站智能推荐:

1回复

用ifelse在R中设置数据

我正在尝试使用ifelse子集数据,然后可以在绘图中使用它。 我正在以这种方式进行编码,因为我试图通过仅定义一个或两个对象,然后运行整个脚本以使用给定条件选择的数据来绘制图,从而使外行可以使用该代码。 问题是mydataframe [mydataframe $ data。 ...]操作无
3回复

R根据ifelse语句选择行

我无法根据if else条件限制数据集。 这是我的数据框的一个示例: 我需要选择:对于每种化学物质和种类,如果scores>0 ,则选择分数最小的行,否则,选择0行 我可以得分最小,但似乎无法成功添加if else语句。 茶几应该是这样的:
1回复

如何使用ifelse条件语句在R中绘制列的选定数据

我有一个展示位置数据集,其中两列是status和salary 。 还有其他列,但我的问题是关于这两个特定列的绘图。 我只想使用ggplot()函数本身中的条件语句绘制status列中在行中具有“放置”值的数据。 是否可以这样做以及如何这样做? 我的代码是
2回复

使用R的ifelse语句中的未使用参数错误

我正在尝试根据 ifelse 语句创建一个新的数据框。 我正在检查 1 个数据帧以查看字段是否包含字符串。 如果是这样,那么我想使用过滤器、子集和 rbind 方法将该数据框中的行添加到另一个数据框中: 这有效: 这不会: 我收到错误: 谁能告诉我我在这里做错了什么? 非常感谢。
1回复

是否有R函数用于在2个条件下使用ifelse

这是我的数据样本 我正在尝试创建一个新变量 d,如果 a=NA 则 b,如果 a=b 则 a,最后,如果 a>b 则 a。 我的最终数据d<-c(12,15,22,65,75,85) 谢谢
1回复

使用ifelse语句基于四列对数据进行子集化

我是 R 的新手,并且在根据某些标准对我的数据进行子集化时遇到了一些问题。 我有五列(位置、地点、物种、日期、时间)。 我想要做的是根据最后一条记录的时间是否比同一日期、同一物种、同一地点和同一位置的上一条记录的时间大于一小时来对我的数据进行子集化。 如果前面的任何一列与前一列不同,我希望它忽略它并
3回复

R:ifelse,根据条件返回子集

我仍在学习R,碰到了超出我的理解范围的东西。 我花了2个小时试图自己解决这个问题,但失败了:-(。 我有一个要使用ifelse进行子集化处理的data.frame(例如,让我们考虑虹膜)。 如果第一行是“ setosa”,我希望返回一个data.frame,其中前50行,如果不是,则接下
2回复

多列组的ifelse格式R

我的df包含一系列具有相似名称的列,每三列进行分组,类似于: AA1 AA2 AA3 BB1 BB2 BB3 CC1 CC2 CC3 1 0 0 0 0 0 0 0 3 3 2 1 1 1 1 1 1 8 1 1 3 4 6 1 1 1 1 1 1 3 4 5 5