R中的简单筛选,但具有多个值

R中的简单筛选,但具有多个值,r,R,我很清楚如何根据一个条件提取一些数据,但每当我尝试多个条件时,一场斗争就会接踵而至。我有一些数据,我只想从df中提取某些年份。以下是一个示例: year value 2006 3 2007 4 2007 3 2008 5 2008 4 2008 4 2009 5 2009 9 2010 2 2010 8 2011 3 2011 8 2011 7 2012 3 2013 4 2012 6 现在让我们假设我只想要2008年、2009年、2010年和2011

我很清楚如何根据一个条件提取一些数据,但每当我尝试多个条件时,一场斗争就会接踵而至。我有一些数据,我只想从df中提取某些年份。以下是一个示例:

year  value
2006  3
2007  4    
2007  3
2008  5
2008  4
2008  4
2009  5
2009  9
2010  2
2010  8
2011  3
2011  8
2011  7
2012  3
2013  4
2012  6
现在让我们假设我只想要2008年、2009年、2010年和2011年。我试着

df<-df[df$year == c("2008", "2009", "2010", "2011"),]
不起作用,所以:

df<-df[df$year == "2008" & df$year == "2009" 
  & df$year == "2010" & df$year == "2011",]
没有错误消息,只是一个空df。我缺少什么?

您需要在%中使用%,而不是==

您需要在%中使用%,而不是==

答案为%in%时有效,但使用|时也应有效。和表示AND逻辑,这意味着年份需要等于2008年、2009年、2010年和2011年,而您需要的是OR运算符

df<-df[df$year == "2008" | df$year == "2009" | df$year == "2010" | df$year == "2011",]
答案为%in%时有效,但使用|时也应有效。和表示AND逻辑,这意味着年份需要等于2008年、2009年、2010年和2011年,而您需要的是OR运算符

df<-df[df$year == "2008" | df$year == "2009" | df$year == "2010" | df$year == "2011",]

这与@Metrics答案基本相同:

分TDF,2009年、2010年和2011年的年度百分比


如果您需要%in%的帮助,请参见?intersect

这与@Metrics答案基本相同:

分TDF,2009年、2010年和2011年的年度百分比

如果您需要%in%的帮助,请参阅?intersect

如果您不喜欢%in%,请尝试使用函数is.element。你可能会发现它更直观

df[is.elementel=df[,年],set=c2008:2011,]

不过要小心。。。切换el和set会产生不同的结果,并且可能会混淆您想要的方式。对于本例,只需记住集合包含您想要的年份子集。

如果您不喜欢%in%,请尝试函数is.element。你可能会发现它更直观

df[is.elementel=df[,年],set=c2008:2011,]


不过要小心。。。切换el和set会产生不同的结果,并且可能会混淆您想要的方式。对于本例,请记住集合包含您想要的年份子集。

问题已经回答,但我想添加一条注释,说明为什么您的第一次尝试会产生意外结果。这是R向量循环的一个很好的例子

我猜你有

   year  value
6  2008  4
13 2011  8
R为什么要这样做?所发生的是R回收向量c2008、2009、2010、2011,如下所示

year  value compare
2006  3     2008
2007  4     2009
2007  3     2010
2008  5     2011
2008  4     2008
2008  4     2009
2009  5     2010
2009  9     2011
2010  2     2008
2010  8     2009
2011  3     2010
2011  8     2011
2011  7     2008
2012  3     2009
2013  4     2010
2012  6     2011
你知道会发生什么吗?当你跑的时候

df<-df[df$year == c("2008", "2009", "2010", "2011"),]

它将返回年份列和比较列相等的行。您没有收到警告,因为比较向量是行数的除数,所以R认为它做的是正确的

问题已经得到了回答,但我想补充一点,说明为什么您的第一次尝试会产生意想不到的结果。这是R向量循环的一个很好的例子

我猜你有

   year  value
6  2008  4
13 2011  8
R为什么要这样做?所发生的是R回收向量c2008、2009、2010、2011,如下所示

year  value compare
2006  3     2008
2007  4     2009
2007  3     2010
2008  5     2011
2008  4     2008
2008  4     2009
2009  5     2010
2009  9     2011
2010  2     2008
2010  8     2009
2011  3     2010
2011  8     2011
2011  7     2008
2012  3     2009
2013  4     2010
2012  6     2011
你知道会发生什么吗?当你跑的时候

df<-df[df$year == c("2008", "2009", "2010", "2011"),]

它将返回年份列和比较列相等的行。您没有收到警告,因为比较向量是行数的除数,所以R认为它做的是正确的

您正在将数字列与字符2008进行比较,是吗?您正在将数字列与字符2008进行比较,是吗?%in%总有一天我会理解您的。谢谢,@Metrics!您的代码%notin%中有一个方便的补充,今天它第一次向我们提供了该函数,@Hugh,并在%notin%中收到了意外的错误消息。有一天我会理解您的。谢谢,@Metrics!您的代码%notin%中有一个方便的补充,今天第一次找到了该函数,@Hugh,并在%notin%中得到了意外的特殊错误消息。在backticks`Ooooooh!中围绕%notin%!这不是我想的意思。我以为这只是为了筑巢,这就是我在其他例子中读到的。非常感谢你的澄清。噢!这不是我想的意思。我以为这只是为了筑巢,这就是我在其他例子中读到的。非常感谢您的澄清。谢谢,我的部分问题是?%在过去不起作用。@Nazer使用例如反引号:?`in%`任何类型的引用在这里都有效谢谢,我的部分问题是?%在过去不起作用。@Nazer使用例如反引号:?`in%`任何类型的引用在这里都有效