【问题标题】:R dataframe with varied column lengths具有不同列长度的 R 数据框
【发布时间】:2012-02-12 22:25:30
【问题描述】:

我有一个 10 行的数据框

df <- c(1:10)

如何向只有 5 行的数据框添加另一列?

df2 <- c(1:5)

感谢您的帮助。

【问题讨论】:

  • 1) c() 将东西粘贴到向量中,该向量与 data.frame 是不同的对象。
  • 2) 对于 data.frames,请参阅 ?data.frame
  • 3) data.frames 必须是等长的列。对于长度不等的元素,请使用 list()。查看 ?list
  • @timriffe 所有这些加起来就是一个很好的答案,恕我直言。 (提示提示提示!)

标签: r


【解决方案1】:

我会在这里给出一些小提示。有关入门材料的几个链接,请参阅 Tyler 对几个问题的回答: convert data.frame column format from character to factor

1) 你用c() 制作的对象被称为向量,这是R 中一种特殊的对象——最基本和最有用的类型。

2) data.framelist 的一种,其中列表的所有元素作为列粘在一起并且必须具有相同的长度。列可以是不同的数据类型 (classes)

3) lists 是 R 中最通用的对象——列表的元素可以是任何东西——任何大小,任何类。这似乎是您所要求的。

例如:

    mylist <- list(vec1 = c(1:10), vec2 = c(1:5))
    mylist
    $vec1
     [1]  1  2  3  4  5  6  7  8  9 10
    $vec2
     [1] 1 2 3 4 5

有多种方法可以返回mylist 的元素,例如

    mylist$vec1
    mylist[1]
    mylist[[1]]
    mylist["vec1"]
    mylist[["vec1"]]

而且可能更多!通过搜索“R 初学者教程”来查找教程并通过它进行学习。玩得开心!

【讨论】:

    【解决方案2】:

    我知道有两种方法可以满足您的要求,但这可能不是解决问题的最佳方法,正如其他人所指出的那样。我将向您展示我自己不会使用的内容(我会选择最有可能的列表选项,如 Tim 所示)。

    df <- data.frame(var=1:10)  #notice I created a data.frame vs. the vector you called
    new.col <- c(1:5)
    
    #METHOD 1
    df$new.col <- c(new.col, rep(NA, nrow(df)-length(new.col)))  #keep as integer
    #METHOD 2
    df$new.col2 <- c(new.col, rep("", nrow(df)-length(new.col))) #converts to character
    df                                         #look at it
    str(df)                                    #see what's happening to the columns
    

    【讨论】:

    • 这正是我一直在寻找的……2018 年,它仍然有效!非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 2018-09-28
    • 1970-01-01
    • 2021-03-20
    • 2019-12-21
    • 1970-01-01
    • 2017-10-31
    相关资源
    最近更新 更多