R中的简单筛选,但具有多个值
我很清楚如何根据一个条件提取一些数据,但每当我尝试多个条件时,一场斗争就会接踵而至。我有一些数据,我只想从df中提取某些年份。以下是一个示例: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
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%`任何类型的引用在这里都有效