【问题标题】:How to convert a list into a data frame while keeping its headers in R如何将列表转换为数据框,同时将其标题保留在 R 中
【发布时间】:2016-10-25 16:26:44
【问题描述】:

我有一个名为mylist 的列表,其中除了标题之外还有 108 行。我尝试将其转换为数据框,并使用以下命令成功运行

df <- data.frame(matrix(unlist(mylist), nrow=108, byrow=F))

但是,我的列表 (mylist) 中每个矩阵的标题尚未在我的新数据框 df 中定义。

names(df)

"X1" "X2" "X3" "X4" "X5" "X6" "X7" "X8" "X9" "X10" "X11" "X12" "X13" "X14" "X15" "X16" "X17" "X18" "X19" "X20" "X21" "X22" "X23" "X24" "X25" "X26" "X27" "X28" "X29" "X30" "X31" "X32" "X33" "X34" "X35" "X36"

mylist 看起来像这样

head(mylist[[1]])

      RAmi         MDaf
1   11.806405   -3.588567
2   7.711101    -9.721415
3   2.315104    11.217575
4   20.372999   -2.267938
5   22.279704   -1.668082
6   13.57909    20.67355



head(mylist[[2]])

          Tomi         Rahaf
    1     325          -3
    2      71          -9
    3      2           11
    4     20.999      -22
    5      22         -16
    6     139         2065

这仅适用于head(mylist[[i]]) i=1 但对于 i=1,2,3, ... , 18 也存在类似的情况

我想要的是把它们都放在一个相邻的数据框中。它工作得很好,但我的标题有问题

我希望有人可以帮助我了解如何做到这一点。 谢谢

【问题讨论】:

  • 显示mylist 或说明问题的传真...
  • 太长了怎么给你看
  • 使用一个足够相似的不同列表来说明问题。列表没有“标题”或“行”之类的东西,所以如果没有示例,您要问的内容很不清楚。有关制作可重现示例的建议,请参阅:stackoverflow.com/a/28481250
  • 这可以像names(df) &lt;- names(mylist) 这样简单,如果不是那么简单,那么您还没有给我们足够的信息来支持进一步的编码。
  • names(mylist) 为空(没有理由)。我根据您的要求编辑它

标签: r dataframe jupyter-notebook


【解决方案1】:

将数据帧列表转换为一个数据帧似乎存在问题。因此,最好从一开始就使用一个数据框。

例如,在我的例子中,我导入了原始数据

#data1=read.csv(file.choose(), header=F)
data1=read.csv

然后我开始分析我的数据。然后我编写了一个代码来生成一个数据框,如

# Here we are extracting the data which we wish to have
#iterations=nrow(data1) #Check the number of rows

listOfDataFrames <- vector(mode = "list", length = 18)   # define a dataframe with length
#mylist <- list() #create an empty list
for (k in 0:17)
{
    j=18 # from 14 i.e. switzerland this is not true anymore 
    if ((k>=14) && (k<16))
    {
        f=7+j*k
        s=3+j*k

    }  else if (k<14)
    {
        s=7+j*k-4
        f=7+j*k
    } else if (k==16)
    {
        f=j*k+5
        s=f+4
    } else if (k==17)
    {
        f=304
        s=301
    }
    b= data1[,c(f,s)] 
    #mylist[[k+1]] <- b
    listOfDataFrames[[k+1]]=b
}
#df <- data.frame(matrix(unlist(mylist), nrow=108, byrow=F))

这让我可以将所有数据与标题一起放入一个数据帧中

df=do.call("cbind", listOfDataFrames)
head(df)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 2018-01-09
    • 2020-07-29
    • 2012-09-19
    相关资源
    最近更新 更多