在数据框中的特定位置添加新变量

7

我有一个数据框,我想在第二个位置添加一个名为"B"的新变量。

  A C D
1 1 5 2
2 3 3 7
3 6 2 3
4 6 4 8
5 1 1 2

有人有想法吗?


DF$B <- 新变量 - CHP
变量的顺序看起来像是 A C D B。我想要的顺序是 A B C D。 - Diegoal
2个回答

10

最简单的方法是添加所需列,然后重新排序:

dat$B <- 1:5
newdat <- dat[, c("A", "B", "C", "D")]

另一种方法:

newdat <- cbind(dat[1], B=1:5, dat[,2:3])

如果您担心开销,也许可以考虑使用data.table解决方案?(在这个答案的帮助下):

library(data.table)
dattable <- data.table(dat)
dattable[,B:=1:5]
setcolorder(dattable, c("A", "B", "C", "D"))

1
如果数据框中有数百个变量,这种方法虽然可行,但会带来巨大的开销。 - Diegoal
是的,我的数据框非常庞大,我想这样做。此外,我的数据框可能会不时更改,因此我不想引用特定的编号位置。 - Alejandro Ochoa
如果您不想要一个特定的编号位置,您如何知道应该放在哪里? - sebastian-c

1
dat$B <- 1:5 
ind <- c(1:which(names(data) == "A"),ncol(data),(which(names(data) == "A")+1):ncol(data)-1)
data <- data[,ind]

在数据框的末尾创建变量,然后使用指示向量来标识如何重新排序列。ind只是一个数字向量。

谢谢您的回答!我(以及我们大多数人)都有一个不止几个变量的数据框,因此手动输入每个列名或编号将需要太多的工作量!但是,您的代码应该进行如下调整:(ncol(data)-1)。如果您忘记了额外的括号,那么A列会得到一个副本A.1。 - Poza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接