我有一个excel文件包含两张表。 第1页是
Col.1 Col.2 Col.3 Col.4 Col.5 Col.6 Col.7 Col.8
1 1 2 3 4 5 6 7 8
2 6 7 8 9 10 11 12 13
3 11 12 13 14 15 16 17 18
4 16 17 18 19 20 21 22 23
5 21 22 23 24 25 26 27 28
6 26 27 28 29 30 31 32 33
7 31 32 33 34 35 36 37 38
8 36 37 38 39 40 41 42 43
9 41 42 43 44 45 46 47 48
10 46 47 48 49 50 51 52 53
和第2页包含
starInterval endInterval
1 10
51 70
21 30
现在我想从工作表2中选择第一行并在工作表1中的col.8中搜索如果在1到10之间找到的值删除整行,然后在工作表2中选择2行并继续。
R i编写的代码是
File1 = loadWorkbook("exp.xlsx") # read file
IntervalSheet = readWorksheet(File1, sheet = 2) #read sheet 2
File1.Rows = nrow(IntervalSheet)
StartInterval = IntervalSheet[,1]
EndInterval = IntervalSheet[,2]
#read sheet 1 in which we have to delete the rows
MalwareSheet = readWorksheet(File1, sheet = 1)
Malware.Sheet.Rows = nrow(MalwareSheet)
for (i in 1:File1.Rows )
{
# value selection from interval sheet
startvalue = StartInterval[i]
endvalue = EndInterval[i]
for (j in 1:Malware.Sheet.Rows)
{
d<-MalwareSheet[!(MalwareSheet$col.8 >= startvalue & MalwareSheet$col.8 <= endvalue),]
print (d)
j= j+1
}
i = i+1
}
d
它还给我......
[1] Col.1 Col.2 Col.3 Col.4 Col.5 Col.6 Col.7 Col.8
<0 rows> (or 0-length row.names)
但我期待输出
Col.1 Col.2 Col.3 Col.4 Col.5 Col.6 Col.7 Col.8
2 6 7 8 9 10 11 12 13
3 11 12 13 14 15 16 17 18
6 26 27 28 29 30 31 32 33
7 31 32 33 34 35 36 37 38
8 36 37 38 39 40 41 42 43
9 41 42 43 44 45 46 47 48
这是一张示例表我有一个大数据大约21000行,这就是为什么我想在编程的帮助下做到这一点。如果有可能在python中,那么也建议我
答案 0 :(得分:0)
在R
中,我们循环遍历第二个数据集的行序列,如果'Col.8'值在每行的'starInterval'到'endInterval'的值序列中,则删除行第二个数据,并更新第一个数据集
for(i in seq_len(nrow(df2))) {
df1 <- df1[!(df1$Col.8 %in% seq(df2$starInterval[i], df2$endInterval[i], by = 1)),]
}
df1
# Col.1 Col.2 Col.3 Col.4 Col.5 Col.6 Col.7 Col.8
#2 6 7 8 9 10 11 12 13
#3 11 12 13 14 15 16 17 18
#6 26 27 28 29 30 31 32 33
#7 31 32 33 34 35 36 37 38
#8 36 37 38 39 40 41 42 43
#9 41 42 43 44 45 46 47 48
其中'df1和'df2'是使用readxl
或XLConnect
或其中一个软件包读取的Excel数据的第一张和第二张
df1 <- structure(list(Col.1 = c(1L, 6L, 11L, 16L, 21L, 26L, 31L, 36L,
41L, 46L), Col.2 = c(2L, 7L, 12L, 17L, 22L, 27L, 32L, 37L, 42L,
47L), Col.3 = c(3L, 8L, 13L, 18L, 23L, 28L, 33L, 38L, 43L, 48L
), Col.4 = c(4L, 9L, 14L, 19L, 24L, 29L, 34L, 39L, 44L, 49L),
Col.5 = c(5L, 10L, 15L, 20L, 25L, 30L, 35L, 40L, 45L, 50L
), Col.6 = c(6L, 11L, 16L, 21L, 26L, 31L, 36L, 41L, 46L,
51L), Col.7 = c(7L, 12L, 17L, 22L, 27L, 32L, 37L, 42L, 47L,
52L), Col.8 = c(8L, 13L, 18L, 23L, 28L, 33L, 38L, 43L, 48L,
53L)), .Names = c("Col.1", "Col.2", "Col.3", "Col.4", "Col.5",
"Col.6", "Col.7", "Col.8"), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
df2 <- structure(list(starInterval = c(1L, 51L, 21L), endInterval = c(10L,
70L, 30L)), .Names = c("starInterval", "endInterval"), class = "data.frame",
row.names = c(NA, -3L))