使用ifelse从R中的数据集中删除不需要的行
我有一个数据集,我想删除我的几个个人在第一个观察年的第11个月的事件。有可能用ifelse做这个吗?比如:使用ifelse从R中的数据集中删除不需要的行,r,subset,if-statement,R,Subset,If Statement,我有一个数据集,我想删除我的几个个人在第一个观察年的第11个月的事件。有可能用ifelse做这个吗?比如: ifelse(ID=="1" & Month=="11" and Year=="2006", "remove these rows", ifelse(ID=="2" & Month=="11" & Year=="2007", "remove these rows", "nothing")) 一如既往,感谢所有帮助!:) 如果您只
ifelse(ID=="1" & Month=="11" and Year=="2006", "remove these rows",
ifelse(ID=="2" & Month=="11" & Year=="2007", "remove these rows",
"nothing"))
一如既往,感谢所有帮助!:) 如果您只需要一个要删除或不删除的指示器,那么您甚至不需要
ifelse()
ind <- (Month == "11") &
((ID == "1" & Year == "2006") | (ID == "2" & Year == "2007"))
给
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
R>ind
[1] 假假假假假假假假假真假
[13] 假假假假假假假假假真假
[25]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[37]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[49]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[61]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[73]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[85]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[97]假假假假假假假假假真假
[109]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
[121]假假假假假假假假假假假假假假假
[133]假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
R> dat2北罗湖(dat)
[1] 144
R> nrow(dat2)
[1] 140
就示例数据而言,这是正确的A
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]]
库(data.table)
DT这个问题可能有很多很好的答案,所有这些都将从一个可复制的例子中受益匪浅。你要删除多少人?2个或3个,或更多?(如果更多的话,你应该在%
中使用%)。感谢你的提醒——我在与角色/因素和-J(…)
斗争,啊,我没有注意到角色/因素方面。如果DT
的列是字符类型,则:DT[-DT[J(c(“1”,“2”),as.character(2006:2007),“11”),其中=TRUE]
。如果它们是factor,那么它也会起作用(我认为是警告)或者作为factor:DT[-DT[J(factor(1:2),factor(2006:2007),factor(11)),它=TRUE]
。
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]]