是否可以使用R在数据框中交换列?

baz*_*baz 22 swap r

我在数据框中有三个变量,并希望交换4列

"dam"   "piglet"   "fdate"   "ssire"
Run Code Online (Sandbox Code Playgroud)

"piglet"   "ssire"   "dam"   "tdate"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用R进行交换吗?

任何帮助将非常感谢.

巴兹

42-*_*42- 34

dfrm <- dfrm[c("piglet", "ssire", "dam", "tdate")]
Run Code Online (Sandbox Code Playgroud)

要么:

dfrm <- dfrm[ , c("piglet", "ssire", "dam", "tdate")]
Run Code Online (Sandbox Code Playgroud)

  • 知道如何在不重新分配整个数据框的情况下做到这一点吗?当你有很多列时,它可能是个问题......而`dd [2:3] < - dd [3:2]`将_not_更改属性(包括列名!). (3认同)

koh*_*ske 13

d <- data.frame(a=1:3, b=11:13, c=21:23)
d
#  a  b  c
#1 1 11 21
#2 2 12 22
#3 3 13 23
d2 <- d[,c("b", "c", "a")]
d2
#   b  c a
#1 11 21 1
#2 12 22 2
#3 13 23 3
Run Code Online (Sandbox Code Playgroud)

或者你可以使用索引做同样的事情:

d3 <- d[,c(2, 3, 1)]
d3
#   b  c a
#1 11 21 1
#2 12 22 2
#3 13 23 3
Run Code Online (Sandbox Code Playgroud)


Ric*_*ton 8

总结其他帖子,有三种更改列顺序的方法,以及两种在每种方法中指定索引的方法.

给出一个样本数据框

dfr <- data.frame(
  dam    = 1:5,
  piglet = runif(5),
  fdate  = letters[1:5],
  ssire  = rnorm(5)
)
Run Code Online (Sandbox Code Playgroud)

Kohske的回答:您可以使用列号来使用标准矩阵式索引

dfr[, c(2, 4, 1, 3)]
Run Code Online (Sandbox Code Playgroud)

或使用列名称

dfr[, c("piglet", "ssire", "dam", "fdate")]
Run Code Online (Sandbox Code Playgroud)

DWin&Gavin的回答:数据框允许您在指定索引时省略行参数.

dfr[c(2, 4, 1, 3)]
dfr[c("piglet", "ssire", "dam", "fdate")]
Run Code Online (Sandbox Code Playgroud)

PaulHurleyuk的回答:你也可以使用subset.

subset(dfr, select = c(2, 4, 1, 3))
subset(dfr, select = c(c("piglet", "ssire", "dam", "fdate")))
Run Code Online (Sandbox Code Playgroud)


Pau*_*yuk 6

你可以使用子集的'select'参数;

#Assume df contains "dam" "piglet" "fdate" "ssire"

newdf<-subset(df, select=c("piglet", "ssire", "dam", "tdate"))
Run Code Online (Sandbox Code Playgroud)