對於一個賦值,我寫了一個以「id」作爲參數的函數,其中我創建了一個空數據幀,然後在for循環中讀取了完整情況的數量(沒有NAs)在一系列的CSV文件中。這給了我一個有兩列(id,#complete cases)的數據框「dat」,我已經驗證過了。現在我遇到了基於id參數的子集問題。我應該能夠通過第1列至子集相當於ID:R按子列排列數據框
dat[which(dat[, 1] %in% id),]
但是當我運行該功能,則返回無(無輸出,沒有錯誤)。在本網站和其他一些搜索後,我試圖命名列,當我創建的數據幀,有東西叫列子集:
dat <- data.frame("monitor"=integer(), "nobs"=integer())
dat_subset <- dat[which(dat[, "monitor"] %in% id),]
但這返回「選擇未定義列」。所以,我想指定我的數據幀的另一種方法:
dat <- data.frame(ncol=2)
colnames(dat) <- c("ID", "nobs")
但是這給錯誤「名稱」屬性[2]必須是相同的長度,矢量〔1〕。什麼是長度1向量?我沒有問過2列數據框嗎?
任何人都可以幫助我調試任何這些選項?非常感謝!
根據反饋編輯:我正確初始化數據框(感謝評論)。 (0),「nobs」= integer(0)) Str(dat)
顯示我已經正確地做了這個 'data.frame':0 obs。 2個變量: $ ID:整數 $ NOBS:整數 如此看來,我的問題出在for循環後面,如使用str(dat)
循環顯示的列名已經被丟棄後:
for (i in 1:332) {
nobs <- sum(complete.cases(read.csv(files_list[i])))
rowvector <- c(i,nobs)
dat <- rbind(dat, rowvector)
}
'data.frame': 332 obs. of 2 variables:
$ X1L : int 1 2 3 4 5 6 7 8 9 10 ...
$ X117L: int 117 1041 243 474 402 228 442 192 275 148 ...
爲數據框添加行時,爲什麼這些名稱不會粘住? ?rbind
指出「列名取自具有適當名稱的第一個參數」。
請參閱'?data.frame'。函數中沒有'ncol'參數。如果您使用'data.frame(ncol = 2)'並將其打印出來,您將看到一個名爲'ncol'的列的data.frame。 – JasonWang
這裏有很多概念來解釋。問題太廣泛。我發現的一個錯誤是dat [,1]返回一個data.frame,你可能想使用'drop = TRUE'參數來使它成爲矢量 –