使用 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
我想我遗漏了一些非常简单的东西,但我似乎无法找到与我需要的直接相关的解决方案:我有一个数据框,其中有一个字母作为行名和两个数值列。作为循环的一部分,我 运行 我创建了一个新的向量(来自索引),它既有字母又有数字(例如 "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