如何删除行的时候,他们不符合标准
问题描述:
我一直忙于看起来像下面如何删除行的时候,他们不符合标准
df<- structure(list(V1 = structure(1:6, .Label = c("A", "B", "C",
"D", "E", "F"), class = "factor"), V2 = structure(1:6, .Label = c("AA",
"BB", "CC", "DD", "EE", "FF"), class = "factor"), V3 = structure(c(6L,
5L, 4L, 1L, 3L, 2L), .Label = c("hddu", "jfhu", "jshsg", "kduf",
"Tlsu", "Trsm"), class = "factor"), V4 = c(1L, 2L, 0L, 0L, 5L,
6L), V5 = c(0L, 2L, 0L, 4L, 0L, 5L), V6 = c(0L, 0L, 4L, 6L, 0L,
7L), V7 = c(0L, 0L, 5L, 0L, 0L, 8L), V8 = c(0L, 0L, 0L, 0L, 6L,
0L), V9 = c(0L, 0L, 0L, 7L, 0L, 0L)), .Names = c("V1", "V2",
"V3", "V4", "V5", "V6", "V7", "V8", "V9"), class = "data.frame", row.names = c(NA,
-6L))
看起来像这样
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 A AA Trsm 1 0 0 0 0 0
2 B BB Tlsu 2 2 0 0 0 0
3 C CC kduf 0 0 4 5 0 0
4 D DD hddu 0 4 6 0 0 7
5 E EE jshsg 5 0 0 0 6 0
6 F FF jfhu 6 5 7 8 0 0
我想是删除数据对于至少2列连续没有值的行。例如,他们应该有前2列,或者后2列或第3列,如果他们有更多的话,那就可以了。 我想检测到它们,以及在这种情况下作出的输出没有它们
行号1,4和5,所以我需要两个输出
1-索引1,4和5(该节目哪些行被删除) 2-预期的输出是这样的
B BB Tlsu 2 2 0 0 0 0
C CC kduf 0 0 4 5 0 0
F FF jfhu 6 5 7 8 0 0
答
可以手动拾取具有索引,其由一个水平移位和使用矢量&
找出两个数据帧,如果有任何连续TRUE和收集行明智的条件与rowSums
滤波指数:
df[rowSums(df[4:8] & df[5:9]) != 0, ]
# V1 V2 V3 V4 V5 V6 V7 V8 V9
# 2 B BB Tlsu 2 2 0 0 0 0
# 3 C CC kduf 0 0 4 5 0 0
# 4 D DD hddu 0 4 6 0 0 7
# 6 F FF jfhu 6 5 7 8 0 0
如果列具有待配对每隔一列,seq
可以用来生成所需的索引:
df[rowSums(df[seq(4, 9, 2)] & df[seq(5, 9, 2)]) != 0, ]
# V1 V2 V3 V4 V5 V6 V7 V8 V9
#2 B BB Tlsu 2 2 0 0 0 0
#3 C CC kduf 0 0 4 5 0 0
#6 F FF jfhu 6 5 7 8 0 0
答
的逻辑并不清楚。但是,这似乎工作
df[Reduce(`|`, Map(`&`, df[-(1:3)][c(TRUE, FALSE)], df[-(1:3)][c(FALSE, TRUE)])),]
# V1 V2 V3 V4 V5 V6 V7 V8 V9
#2 B BB Tlsu 2 2 0 0 0 0
#3 C CC kduf 0 0 4 5 0 0
#6 F FF jfhu 6 5 7 8 0 0
对于您的输入,所有行都具有所有列的值。解释你真正需要的。 “对某些专栏没有价值”是什么意思? – user31264
@ user31264我的意思是没有零 – nik
如果你的意思不是零,那么第四排呢? – akrun