带有不同列长度的R数据框

6

我有一个包含10行的数据框

df <- c(1:10)

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

df2 <- c(1:5)

感谢您的帮助。

  1. c()函数将元素添加到向量中,这是一个不同于data.frame的对象。
- tim riffe
  1. 对于数据框,请参阅?data.frame。
- tim riffe
1
  1. data.frame的各列长度必须相等。对于长度不同的元素,请使用list()。参见?list。
- tim riffe
1
@timriffe 在我看来,这些都加起来就是一个相当不错的“答案”了。(暗示暗示暗示!) - joran
2个回答

14

我在这里提供一些小技巧。看看 Tyler 在几个问题前面的回答,了解一些入门资料的链接:

将数据框列格式从字符转换为因子

1)您使用 c() 制作的对象称为向量,这是 R 中最基本和最有用的对象之一。

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

3)list 是 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初学者教程”并努力学习吧。玩得开心!


11

我知道两种方法可以得到你所要求的东西,但这可能不是解决问题的最佳方法,因为其他人已经指出了。我将向您展示的内容,我自己不会使用它(我很可能会像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

1
这正是我一直在寻找的...2018年了,它仍然有效!非常感谢!! - Biocrazy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接