R在特定位置向数据帧添加元素

R在特定位置向数据帧添加元素,r,R,我想在R中的数据帧的特定位置添加一行。我知道这个网站上有一些解决方案,但它们似乎不起作用。我知道rbind相当慢,但考虑到我只需要为单个元素执行,这并不重要: 例如: vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9)) temp <- rbind(vector_labour_brexit.m[1:5,], data.frame("value"=5000),

我想在R中的数据帧的特定位置添加一行。我知道这个网站上有一些解决方案,但它们似乎不起作用。我知道rbind相当慢,但考虑到我只需要为单个元素执行,这并不重要:

例如:

vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9))

temp <- rbind(vector_labour_brexit.m[1:5,], data.frame("value"=5000), 
                            vector_labour_brexit.m[6:nrow(vector_labour_brexit.m),])

vector_labour_brexit.m我们可以使用
add_row
在某个位置添加特定行

library(tibble)
add_row(vector_labour_brexit.m , .before = 6, value = 5000)
#   value
#1      1
#2      2
#3      3
#4      4
#5      5
#6   5000
#7      6
#8      7
#9      8
#10     9

OP代码中的问题是由于默认情况下
drop=TRUE
当存在单个列或行时,它会删除维度

vector_labour_brexit.m[1:5,]

如果我们在子集设置时添加
drop=FALSE
,它将起作用

我们可以使用
add\u row
在某个位置添加特定的行

library(tibble)
add_row(vector_labour_brexit.m , .before = 6, value = 5000)
#   value
#1      1
#2      2
#3      3
#4      4
#5      5
#6   5000
#7      6
#8      7
#9      8
#10     9

OP代码中的问题是由于默认情况下
drop=TRUE
当存在单个列或行时,它会删除维度

vector_labour_brexit.m[1:5,]

如果我们在子集设置时添加
drop=FALSE
,它会起作用

您的问题是,在索引结果中只有一列的data.frames时,返回值会简化为一个向量,这会混淆
rbind
。为了安全起见,你可以这样做

vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9))

temp <- rbind(vector_labour_brexit.m[1:5,,drop=FALSE],
              data.frame("value"=5000), 
              vector_labour_brexit.m[6:nrow(vector_labour_brexit.m),,drop=FALSE])

vector\u labour\u brexit.m您的问题是,在为结果中只有一列的data.frames编制索引时,返回值被简化为一个使
rbind
混淆的向量。为了安全起见,你可以这样做

vector_labour_brexit.m <- data.frame("value" = c(1,2,3,4,5,6,7,8,9))

temp <- rbind(vector_labour_brexit.m[1:5,,drop=FALSE],
              data.frame("value"=5000), 
              vector_labour_brexit.m[6:nrow(vector_labour_brexit.m),,drop=FALSE])

vector_labour_brexit.m谢谢你,现在代码旁边的位置是1,2,3,4,5,61,7,8,9,10,而不是1,2,3,4,5,6,7,8,9,10。这只是视图问题还是发生了什么?data.frames保留了原始行名称,并为新data.frames创建了新的行名称。你关心行名吗?这真的不应该引起任何麻烦。您可以运行
rownames(temp)谢谢!事实上,我现在不需要它们,但我不确定以后它是否会成为一个问题!不过,谢谢你,现在代码旁边的位置是1,2,3,4,5,61,7,8,9,10,而不是1,2,3,4,5,6,7,8,9,10。这只是视图问题还是发生了什么?data.frames保留了原始行名称,并为新data.frames创建了新的行名称。你关心行名吗?这真的不应该引起任何麻烦。您可以运行
rownames(temp)谢谢!事实上,我现在不需要它们,但我不确定以后它是否会成为一个问题!这对我不起作用。With.before表示:“remove_rownames(out)中的错误:is.data.frame(.data)不是TRUE”,而With.before表示:“错误:在
add_row()
中的新行必须使用已经存在的列:。在
中找不到
之前的列。
。@ToTom。对于我来说,这个例子很奇怪。我在第一篇博文中所写的价值观对我来说并不适用。我正在运行R3.6.1。不管怎么说,drop=FALSE的解决方案很好,所以这无关紧要。谢谢大家!@ToTom我使用的是
R3.6.2
,但是。可能是因为。TIBLE的版本这对我不起作用。With.before表示:“remove_rownames(out)中的错误:is.data.frame(.data)不是TRUE”,而With.before表示:“错误:在
add_row()
中的新行必须使用已经存在的列:。在
中找不到
之前的列。
。@ToTom。对于我来说,这个例子很奇怪。我在第一篇博文中所写的价值观对我来说并不适用。我正在运行R3.6.1。不管怎么说,drop=FALSE的解决方案很好,所以这无关紧要。谢谢大家!@ToTom我使用的是
R3.6.2
,但是。可能是因为。TIBLE的版本