首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用循环删除R中所有负值行

如何使用循环删除R中所有负值行
EN

Stack Overflow用户
提问于 2016-04-29 05:21:14
回答 2查看 1K关注 0票数 0

我对循环很陌生。我有一个难以处理的数据框架,我想要减少,这样只有观察(行)没有负数。我被困在这里了。这将在每次创建空值时创建一个空值,而不是裁剪后的数据帧。

代码语言:javascript
运行
复制
    mydata=for (i in names(df)) {
      subset(df, df[[ paste(i)]]>=0) 
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-29 05:49:38

一个纯矢量化的解决方案怎么样:

代码语言:javascript
运行
复制
DF[!rowSums(DF < 0), ]
#  ID Items Sequence
#1  1     D        1
#2  1     A        2
#5  2     B        2

数据

代码语言:javascript
运行
复制
DF=structure(list(ID = c(1, 1, 1, -1, 2), Items = c("D", "A", "A", 
"A", "B"), Sequence = c(1, 2, -2, 1, 2)), .Names = c("ID", "Items", 
"Sequence"), row.names = c(NA, -5L), class = "data.frame")

解释

比较DF < 0TRUE/FALSE中的每个值提供data.frame

代码语言:javascript
运行
复制
DF < 0
#         ID Items Sequence
# [1,] FALSE FALSE    FALSE
# [2,] FALSE FALSE    FALSE
# [3,] FALSE FALSE     TRUE
# [4,]  TRUE FALSE    FALSE
# [5,] FALSE FALSE    FALSE

然后rowSums()给出每一行的和(作为TRUE == 1, FALSE == 0)

代码语言:javascript
运行
复制
rowSums(DF<0)
# [1] 0 0 1 1 0

所以我们可以用这个向量来子集我们的data.frame。但是,因为我们希望它的值都是正的(即rowSums == 0),所以我们否定了过滤器。

代码语言:javascript
运行
复制
DF[!rowSums(DF < 0), ]
票数 6
EN

Stack Overflow用户

发布于 2016-04-29 05:37:09

这不需要循环:)

代码语言:javascript
运行
复制
DF=structure(list(ID = c(1, 1, 1, -1, 2), Items = c("D", "A", "A", 
"A", "B"), Sequence = c(1, 2, -2, 1, 2)), .Names = c("ID", "Items", 
"Sequence"), row.names = c(NA, -5L), class = "data.frame")

 DF
#  ID Items Sequence
#1  1     D        1
#2  1     A        2
#3  1     A       -2
#4 -1     A        1
#5  2     B        2


new_DF = DF[apply(DF<0,1,function(x) !any(x)),]

new_DF
#  ID Items Sequence
#1  1     D        1
#2  1     A        2
#5  2     B        2
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36930138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档