如何使用循环删除R中所有具有负值的行
How to use a loop to delete all rows with negative values in R
我是循环新手。我有一个笨重的数据框,我想减少它,以便只保留没有负数的观察值(行)。这就是我被困的地方。这每次都会创建一个空值,而不是修剪后的数据框。
mydata=for (i in names(df)) {
subset(df, df[[ paste(i)]]>=0)
}
你不需要循环:)
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
纯矢量化解决方案怎么样:
DF[!rowSums(DF < 0), ]
# ID Items Sequence
#1 1 D 1
#2 1 A 2
#5 2 B 2
数据
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 < 0
对 data.frame
中的每个值给出 TRUE/FALSE
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
)
rowSums(DF<0)
# [1] 0 0 1 1 0
所以我们可以使用这个向量来对我们的 data.frame 进行子集化。但是,因为我们希望它的值都是正的(即 rowSums == 0),所以我们否定过滤器
DF[!rowSums(DF < 0), ]
我是循环新手。我有一个笨重的数据框,我想减少它,以便只保留没有负数的观察值(行)。这就是我被困的地方。这每次都会创建一个空值,而不是修剪后的数据框。
mydata=for (i in names(df)) {
subset(df, df[[ paste(i)]]>=0)
}
你不需要循环:)
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
纯矢量化解决方案怎么样:
DF[!rowSums(DF < 0), ]
# ID Items Sequence
#1 1 D 1
#2 1 A 2
#5 2 B 2
数据
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 < 0
对 data.frame
TRUE/FALSE
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
)
rowSums(DF<0)
# [1] 0 0 1 1 0
所以我们可以使用这个向量来对我们的 data.frame 进行子集化。但是,因为我们希望它的值都是正的(即 rowSums == 0),所以我们否定过滤器
DF[!rowSums(DF < 0), ]