将列表转换为R中具有特定列名称的数据框

时间:2015-09-21 17:38:20

标签: r list dataframe

我已经在这里回顾了其他类似的主题,但尚未找到我的问题的答案。我在for循环中构建一个列表,我希望将其转换为数据框。最终列表如下所示:

[[1]]
[1] 117

[[2]]
[1] 1041

[[3]]
[1] 243

[[4]]
[1] 474

[[5]]
[1] 402

我想将其转换为具有特定列名称的数据框:ID和nobs。例如,对于数据框中的第5行,ID的行值为5,bobs的值为402.运行此代码:

d <- data.frame(cbind(l))

给了我列但没有名字。如何以及在何处指定列名?我正在学习R.感谢您的帮助。

这是我的功能的完整代码:

complete <- function(directory, id) {
        files_full <- list.files(directory, full.names = TRUE)
        l <- list()
        for (i in id){
                nobs <- sum(complete.cases(read.csv(files_full[i])))
                l[i] <- nobs
        }
        d <- data.frame(cbind(l))
        d
}

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

l <- list(a=305,b=354,c=436,d=36)
> l
$a
[1] 305
$b
[1] 354
$c
[1] 436
$d
[1] 36

data.frame(id=names(l), nobs=unlist(l))
  id nobs
a  a  305
b  b  354
c  c  436
d  d   36
data.frame(l)
    a   b   c  d
1 305 354 436 36
unlist(l)
a   b   c   d 
305 354 436  36

请注意,第一个和第二个是data.frame,但是last是名为numeric vector。

编辑:

您的列表中可能没有您的示例中的任何名称。     我假设您要创建命名列表并将其转换为data.frame ...     如果要将名称设置为列表,则应该起作用:

complete <- function(directory, id) {
    files_full <- list.files(directory, full.names = TRUE)
    l <- vector(mode='list', length=length(files_full))
    for (i in files_full){
            nobs <- sum(complete.cases(read.csv(i)))
            l[i] <- nobs
    }
    d <- data.frame(cbind(l))
    d
}

但我们试试这个:     sapply(list.files(), function(x)sum(complete.cases(read.csv(x)))) 它应该返回类似的内容:

a.csv   b.csv    c.csv
 2153     326      235
相关问题