对于一个赋值,我写了一个以“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'参数来使它成为矢量 –