我在数据框中有三个变量,并希望交换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)
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)
总结其他帖子,有三种更改列顺序的方法,以及两种在每种方法中指定索引的方法.
给出一个样本数据框
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)
你可以使用子集的'select'参数;
#Assume df contains "dam" "piglet" "fdate" "ssire"
newdf<-subset(df, select=c("piglet", "ssire", "dam", "tdate"))
Run Code Online (Sandbox Code Playgroud)