我正在尝试使用整个数据帧上的逻辑运算符来过滤数据帧,并且在子集化数据帧中以某种方式NA行正在爬行。我已经完成了Subsetting R data frame results in mysterious NA rows和Subsetting R data frame results in mysterious NA rows,但我无法找到或找到解决方案。
df <- data.frame(number1 = c(1:5,-13,-2,-34,24,33), number2 = c(10:3, -73, -82))
df
df[df>=0 & !is.na(df$number2),]
我正在尝试过滤,以便在原始数据框中的任何行中都没有负值。我最终获得了18行df和多个NA行。
我尝试在我的df上使用sapply检查逻辑操作是否正常。但如果我用“哪个”包裹,我会得到所有18行。
sapply(names(df), function(x) df[x]>=0)
我的目标是获得任何列中没有负值的df。
编辑:在我的情况下,我不知道在过滤它们之前生成的df会有多少列。因此,使用&amp;运营商是不可能的。这正是我试图应用逻辑运算符或整个df
的原因答案 0 :(得分:1)
首先,您需要将矩阵缩减为单个向量。如果要将其概括为任意数量的列,则可以执行
df[Reduce(`&`, lapply(df, `>=`, 0)), ]
# number1 number2
# 1 1 10
# 2 2 9
# 3 3 8
# 4 4 7
# 5 5 6
OR
df[rowSums(df >= 0) == ncol(df), ]
# number1 number2
# 1 1 10
# 2 2 9
# 3 3 8
# 4 4 7
# 5 5 6
答案 1 :(得分:0)
问题是你试图对行进行过滤,这意味着你应该将1d逻辑向量传递给选择器,而是传递2d逻辑矩阵。使用此矩阵作为选择器意味着不必对行进行过滤,只会删除这些值。
如果您执行以下操作,它将删除所有具有负值但没有任何结果NAs的行
<ul>
<li>
<div class="thumbContainer">
<img src="Images/7.jpg" alt="Willian Borges" >
</div>
<div class="latest-news-container">
<h3>Willian Aiming for the Top</h3>
<p>
The former Liverpool midfielder will have brought back painful memories for Jose Mourinho and Chelsea fans after he posted a hilarious nod to the
infamous "ghost goal" incident from the 2004-05 season.... <a class="btn" href="#">Read more</a>
</p>
</div>
</li>
<li>
<div class="thumbContainer">
<img src="images/8.jpg" alt="Lukaku" >
</div>
<div class="latest-news-container">
<h3>Lukaku Goal Drought Continues</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent euismod ultrices ante, ac laoreet nulla vestibulum adipiscing. Nam quis justo in augue auctor imperdiet.</p>
</div>
</li>
<li>
<div class="thumbContainer">
<img src="images/9.jpg" alt="Hart">
</div>
<div class="latest-news-container">
<h3>Bad Treatment at the City</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent euismod ultrices ante, ac laoreet nulla vestibulum adipiscing. Nam quis justo in augue auctor imperdiet.</p>
</div>
</li>
<li>
<div class="thumbContainer">
<img src="images/10.jpg" alt="Ronaldo">
</div>
<div class="latest-news-container">
<p>
<h3>CR7 Smiling to the Bank</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Praesent euismod ultrices ante, ac laoreet nulla vestibulum adipiscing. Nam quis justo in augue auctor imperdiet.</p>
</p>
</div>
</li>
</ul>
其中df <- data.frame(number1 = c(1:5,-13,-2,-34,24,33), number2 = c(10:3, -73, -82))
df
df[df[,1]>=0 & df[,2]>=0,]
返回两列均为正的行的1d逻辑向量。
答案 2 :(得分:0)
尝试以下方法。在您想要的条件之间使用 AND :
> df[df$number1>0 & df$number2>0,]
number1 number2
1 1 10
2 2 9
3 3 8
4 4 7
5 5 6