使用 rbind 在数据框中使用 vector/index 作为行名

Use a vector/index as a row name in a dataframe using rbind

我想我遗漏了一些非常简单的东西,但我似乎无法找到与我需要的直接相关的解决方案:我有一个数据框,其中有一个字母作为行名和两个数值列。作为循环的一部分,我 运行 我创建了一个新的向量(来自索引),它既有字母又有数字(例如 "f2"),然后我需要将其作为新行的名称,然后在它旁边添加两个数字(基于代码的其他部分,但我没意见)。相反,我得到的是 vector/index 的名称作为行名称的标题,我不确定我是否缺少 rbind 的功能或其他使其变得简单的功能。

示例代码:

#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)
rownames(data.frame) <- row.names
data.frame

index.vector <- "f2" 

#what I want the data frame to look like with the new row
data.frame <- rbind(data.frame, "f2" = c(6,11))
data.frame

#what the data frame looks like when I attempt to use a vector as a row name
data.frame <- rbind(data.frame, index.vector = c(6,11))
data.frame

#"why" I can't just type "f" every time
index.vector2 = paste(index.vector, "2", sep="")
data.frame <- rbind(data.frame, index.vector2 = c(6,11))
data.frame

在我的循环中,"index.vector" 是一个随机样本,因此我不能只将 letter/number 写为行名,因此需要能够从中创建行名向量或来自样本的索引。

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

如有任何帮助,我们将不胜感激!

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

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

  #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

希望这会有所帮助。

如果您使用 rbind 操作数据框,那么最新的元素将始终位于数据框的 "bottom" 处。因此,您还可以通过

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

不优雅,但有效:

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