作爲R noob,我目前很可能被一個相當無足輕重的問題困擾着。我的數據看起來像下面的第二張圖片,基本上是一行長度爲三列的行。我需要的是一種掃描工作表的方法,用於查找第一列和第二列中的特定值組合 - 在第二個電子表格中指定的組合(請參見圖1)。當找到特定的組合時,我需要腳本從數據文件中提取有問題的整行。使用R在Excel電子表格中搜索目標使用R
到目前爲止,我已經成功地讀取這些文件沒有問題:
library(xlsx)
folder <- 'C:\\Users\\...\\Desktop\\R EXCEL test\\'
target_file <- paste(folder,(readline(prompt = "Enter filename for target list:")),sep = "")
data_file <- paste(folder,(readline(prompt = "Enter data file:")),sep = "")
targetsDb <- read.xlsx(target_file, sheetName = "Sheet1")
data <- read.xlsx(data_file, sheetName = "Sheet1")
targets <- vector(mode = "list", length = 3)
for(i in 1:nrow(targetsDb)){
targets[[i]] <- c(targetsDb[i,1],targetsDb[i,2])
}
隨着最後命令我已經設法目標組合保存爲列表中的項目。但是,在遍歷文件時,我遇到了麻煩,要在前兩列中查找任何單元格值的組合。我的方法是創建一個列表有一個項目,
SID_IA <- vector(mode = "list", length = 1)
,並與塔1和數據文件的每一行的值2反覆填充它:
for(n in 1:nrow(data)){
SID_IA[[n]] <- c(data[n,1],data[n,2])
然後,我會窩另一個for循環在這裏,它基本上遍歷目標表中的每一行,以檢查當前在SID_IA列表中的值的組合是否與任何目標表中的值匹配。然後在循環結束時,列表被清空,因此它可以填充以下數據值組合。
for(i in targets){
if(SID_IA[[n]] %in% targets){
print(SID_IA[[n]], "in sentence" , data[n,1], "is ", data[n,3])
}else{
print(FALSE)
}
SID_IA[[n]] <- NULL
}
}
但是,如果我嘗試運行最後的循環,它返回以下輸出和錯誤:
[1] FALSE
Error in SID_IA[[n]] : subscript out of bounds
In addition: Warning message:
In if (SID_IA[[n]] %in% targets) { :
the condition has length > 1 and only the first element will be used
因此,它似乎是在做的東西至少一次迭代,但隨後崩潰。我確信我錯過了一些非常基本的東西,但我無法看到它。有任何想法嗎?
編輯:根據要求,我已經刪除了圖像,並提供測試Excel表可用here和here。
如果您提供了一個簡短的真實數據樣本,查看它會容易得多。鏈接到一個簡短的Excel表會做。 –
看着它,我認爲用data.frame代替列表 –
@ R.S將會非常容易。當我回到電腦上的時候,我會試着上傳一個電子表格,但如果你對如何簡化這個過程有任何建議,我都會接受。 – user3010126