【问题标题】: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
    相关资源
    最近更新 更多