R数据帧具有不同的列长度

时间:2012-02-12 22:25:30

标签: r

我有一个10行的数据框

df <- c(1:10)

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

df2 <- c(1:5)

感谢您的帮助。

2 个答案:

答案 0 :(得分:12)

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

1)您使用c()创建的对象称为向量,这是R中特定类型的对象 - 最基本和最有用的对象。

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

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初学者教程”找到一个教程并通过它获得力量。玩得开心!

答案 1 :(得分:6)

我知道有两种方法可以得到你所要求的但是这可能不是其他人指出的问题的最佳方法。我要告诉你的是我自己不会使用(我会选择最有可能像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