首页 > 解决方案 > R中的data和data.frame有什么区别?

问题描述

我知道data.frame是一个包含不同类型列的二维矩阵。我认为data是另一种类型的数据结构R,可以取多个data.frames。

RStudio,现在我有两个datadcdpdb

在此处输入图像描述

我试图了解它们的属性:

> dcd

   Total Frames#: 101
   Total XYZs#:   19851,  (Atoms#:  6617)

    [1]  65.59  84.65  90.92  <...>  59.76  55.48  83.68  [2004951] 

+ attr: Matrix DIM = 101 x 19851

> class(dcd)
[1] "xyz"    "matrix"

> dcd$xyz
Error in dcd$xyz : $ operator is invalid for atomic vectors

> pdb

 Call:  read.pdb(file = pdbfile)

   Total Models#: 1
     Total Atoms#: 6598,  XYZs#: 19794  Chains#: 2  (values: L H)

     Protein Atoms#: 6598  (residues/Calpha atoms#: 442)
     Nucleic acid Atoms#: 0  (residues/phosphate atoms#: 0)

     Non-protein/nucleic Atoms#: 0  (residues: 0)
     Non-protein/nucleic resid values: [ none ]

   Protein sequence:
      DIQMTQSPSSLSASVGDRVTITCKASQNVRTVVAWYQQKPGKAPKTLIYLASNRHTGVPS
      RFSGSGSGTDFTLTISSLQPEDFATYFCLQHWSYPLTFGQGTKVEIKRTVAAPSVFIFPP
      SDEQLKSGTASVVCLLNNFYPREAKVQWKVDNALQSGNSQESVTEQDSKDSTYSLSSTLT
      LSKADYEKHKVYACEVTHQGLSSPVTKSFNRGECEVQLVESGGGL...<cut>...TSAA

+ attr: atom, xyz, calpha, call

> class(pdb)
[1] "pdb" "sse"

> pdb$xyz

   Total Frames#: 1
   Total XYZs#:   19794,  (Atoms#:  6598)

    [1]  24.33  14.711  -3.854  <...>  -34.374  -6.315  14.986  [19794] 

+ attr: Matrix DIM = 1 x 19794

我的问题是:

  1. dcd类似于 101 行 19851 列的矩阵吗?
  2. class(dcd)输出"xyz""matrix",是否意味着同时dcd属于两者"xyz""matrix"类型?
  3. 如何创建一个包含多个的datalike ?pdbdata.frame

例如,如果我有

students <- data.frame(c("Cedric","Fred","George"),c(3,2,2))
names(students) <- c("name", "year")
teachers <- data.frame(c("John","Alice","Mike"),c(6,9,5))
names(teachers) <- c("name", "year")

我怎样才能将studentsand组合teachers成一个data被调用的people,以便我可以使用people$studentsor people$teachers

标签: r

解决方案


如果您询问如何创建一个dataframenamed people,以便您可以使用people$studentsor访问人员的姓名people$teachers,那么实现该功能的代码是:

people <- data.frame(students = students$name, teachers = teachers$name)
people$students

people将是一个如下所示的数据框: 在此处输入图像描述

如果你想要一个list,你可以创建一个列表对象,如下所示:

people2 <- as.list(c("students" = students, "teachers" = teachers))
people2$students.name
# returns [1] Cedric Fred   George

并且people2将是一个列表: 在此处输入图像描述

看到$列表中每个项目旁边的(美元符号)了吗?这告诉你如何访问它们。如果你愿意teachers.name,那么print(people2$teachers.name)会为你做到这一点。

至于你的其他问题:

  1. dcd 是否类似于具有 101 行和 19851 列的矩阵?

dim()您可以使用、ncol()或验证类似矩阵的对象的维度nrow()。在您的情况下,是的,它有 101 行和 19851 列。

  1. class(dcd)输出“xyz”和“matrix”,是否意味着dcd同时属于“xyz”和“matrix”类型?

简单地说,你可以认为它继承了一个matrix类以及xyz. 您可能想了解R 中的类和继承

  1. 如何创建像 pdb 这样包含多个 data.frame 的数据?

看看我上面的代码。people2 <- as.list(c("students" = students, "teachers" = teachers))创建一个list“多个”数据框。


推荐阅读