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

Tyl*_*ler 0 loops r subset

我是循环的新手.我有一个笨重的数据框架,我想减少,以便只保留没有负数的观察(行).这是我被困的地方.这会每次创建一个空值而不是精简数据帧.

    mydata=for (i in names(df)) {
      subset(df, df[[ paste(i)]]>=0) 
    }
Run Code Online (Sandbox Code Playgroud)

Sym*_*xAU 6

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

DF[!rowSums(DF < 0), ]
#  ID Items Sequence
#1  1     D        1
#2  1     A        2
#5  2     B        2
Run Code Online (Sandbox Code Playgroud)

数据

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")
Run Code Online (Sandbox Code Playgroud)

说明

比较DF < 0给出TRUE/FALSE了data.frame中的每个值

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
Run Code Online (Sandbox Code Playgroud)

rowSums()然后给我们每行的总和(as TRUE == 1, FALSE == 0)

rowSums(DF<0)
# [1] 0 0 1 1 0
Run Code Online (Sandbox Code Playgroud)

所以我们可以使用这个向量来对data.frame进行子集化.但是,因为我们想要它的值都是正值(即rowSums == 0),我们否定过滤器

DF[!rowSums(DF < 0), ]
Run Code Online (Sandbox Code Playgroud)

  • @RHertel - 我发帖后看到你的评论,我发誓! (2认同)