使用rbind在数据框中使用矢量/索引作为行名称

时间:2016-08-09 10:39:44

标签: r dataframe rbind

我想我错过了一些非常简单的东西,但我似乎无法找到与我需要的直接相关的解决方案:我有一个数据框,其中有一个字母作为行名称和两列数值。作为我正在运行的循环的一部分,我创建了一个新的向量(来自索引),其中包含字母和数字(例如“f2”),然后我需要将其作为新行的名称,然后再添加两个数字对它(基于代码的其他部分,但我很好)。我得到的是矢量/索引的名称作为行名称的标题,我不确定我是否缺少rbind或其他的功能以使其变得容易。

示例代码:

$rake db:delete
rake db:create
rake db:migrate

在我的循环中,“index.vector”是一个随机样本,因此我不能将字母/数字作为行名写入,因此需要能够从向量或从中创建行名称样本的索引。

循环运行并且将创建随机数量的新行,因此我无法指定需要新名称的行的数量 - 除非有一种方法可以每次都为最新行或底行执行此操作。

任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:1)

我理解了这个问题,但无法解决问题。因此,建议另一种方法来实现相同的

替代解决方案:在循环中的数据绑定之后附加行标签,然后在行末将行名称分配给数据框。

  #Data frame and vector creation

    row.names <- letters[1:5]
    vector.1 <- c(1:5)
    vector.2 <- c(2:6)
    vector.3 <- letters[6:10]

    data.frame <- data.frame(vector.1,vector.2)

    #loop starts
     index.vector <- "f2" 
     data.frame <- rbind(data.frame,c(6,11))  
     row.names<-append(row.names,index.vector)
    #loop ends 

   rownames(data.frame) <- row.names
   data.frame

输出:

   vector.1 vector.2
a         1        2
b         2        3
c         3        4
d         4        5
e         5        6
f2        6       11

希望这会有所帮助。

答案 1 :(得分:1)

不优雅,但有效:

new_row <- data.frame(setNames(list(6, 11), colnames(data.frame)), row.names = paste(index.vector, "2", sep=""))
data.frame <- rbind(data.frame, new_row)
data.frame
# vector.1 vector.2
# a          1        2
# b          2        3
# c          3        4
# d          4        5
# e          5        6
# f22        6       11

答案 2 :(得分:0)

如果使用rbind操纵数据框,则最新元素将始终位于数据框的“底部”。因此,您还可以通过

设置单个行名称
rownnames(data.frame)[nrow(data.frame)] = "new_name"