根据R中一行中的两个或多个值访问行

时间:2014-05-04 17:32:18

标签: r dataframe subset

这应该是一个非常简单的问题,但我不知道该怎么做。 我想删除我的data.frame的某些行。如何根据两列的值访问一行?

DATE <- c("01.01.2000","02.01.2000","03.01.2000","06.01.2000","07.01.2000","09.01.2000","10.01.2000","01.01.2000","02.01.2000","04.01.2000","06.01.2000","07.01.2000","09.01.2000","10.01.2000")
RET <- c(-2.0,1.1,3,1.4,-0.2, 0.6, 0.1, -0.21, -1.2, 0.9, 0.3, -0.1,0.3,-0.12)
COMP <- c("A","A","A","A","A","A","A","B","B","B","B","B","B","B")
df <- data.frame(DATE, RET, COMP)

df

# DATE   RET COMP
# 1  01.01.2000 -2.00    A
# 2  02.01.2000  1.10    A
# 3  03.01.2000  3.00    A
# 4  06.01.2000  1.40    A
# 5  07.01.2000 -0.20    A
# 6  09.01.2000  0.60    A
# 7  10.01.2000  0.10    A
# 8  01.01.2000 -0.21    B
# 9  02.01.2000 -1.20    B
# 10 04.01.2000  0.90    B
# 11 06.01.2000  0.30    B
# 12 07.01.2000 -0.10    B
# 13 09.01.2000  0.30    B
# 14 10.01.2000 -0.12    B

假设我要删除DATE为“07.01.2000”且COMP为“A”的行。如果我可以这样做:

df["07.01.2000" %in% df$DATE and "A" %in% COMP, ] <- NULL

会很好。

1 个答案:

答案 0 :(得分:0)

好吧,你不能通过分配NULL来删除一行。您可以创建不包含这些值的新data.frame。像

这样的东西
df[!(df$DATE=="07.01.2000" & df$COMP =="A"), ]

如果你有更多的日期或比赛,你真的想要使用%in%,只要意识到你的参数被翻转了。所以

df[!(df$DATE %in% "07.01.2000" & df$COMP %in% "A"), ]

是要走的路。