我需要的是交换此表中的每两行...基本上将包含'chao1'的每一行与下一行交换,其中包含'obs'。
我所遇到的所有例子似乎都有一个先前的参考,但我认为,我想要的是有点不同。
Group.1 var S se
1 Cliona celata complex chao1 800.5933 57.51779
2 Cliona celata complex obs 495.4286 63.07360
3 Cliona viridis chao1 432.5548 35.87778
4 Cliona viridis obs 286.0000 55.32179
5 Dysidea fragilis chao1 694.9129 74.85536
6 Dysidea fragilis obs 357.6667 64.02170
7 Phorbas fictitius chao1 851.6950 57.67145
8 Phorbas fictitius obs 523.2500 23.57905
提前感谢您的帮助!
干杯,
安德烈
答案 0 :(得分:4)
快速执行此操作的方法是使用data.table
devel版本setorder
,它会对您的数据集进行重新排序
#### To install development version
## library(devtools)
## install_github("Rdatatable/data.table", build_vignettes = FALSE)
library(data.table) # V >= 1.9.5
setorder(df, Group.1, -var)
# Group.1 var S se
# 2 Cliona celata complex obs 495.4286 63.07360
# 1 Cliona celata complex chao1 800.5933 57.51779
# 4 Cliona viridis obs 286.0000 55.32179
# 3 Cliona viridis chao1 432.5548 35.87778
# 6 Dysidea fragilis obs 357.6667 64.02170
# 5 Dysidea fragilis chao1 694.9129 74.85536
# 8 Phorbas fictitius obs 523.2500 23.57905
# 7 Phorbas fictitius chao1 851.6950 57.67145
答案 1 :(得分:3)
这是使用大卫几个小时前教给我的技巧的方法。它还需要偶数行,并且可以正确排序。
df <- data.frame(g1=c("a","a","b","b"),var=c(1,2,3,4))
df
# g1 var
# 1 a 1
# 2 a 2
# 3 b 3
# 4 b 4
n <- nrow(df)
sidx <- trunc(seq(0,n-1)/2)*2 + rep(c(1,0),n/2) + 1
df <- df[sidx,]
df
# g1 var
# 2 a 2
# 1 a 1
# 4 b 4
# 3 b 3
答案 2 :(得分:2)
假设您的数据框具有偶数行,您可以执行此操作:
n <- nrow(df)
x <- matrix(1:n, ncol=2, byrow=TRUE)
y <- x[,2:1]
inds <- as.numeric(t(y))
new.df <- df[inds,,drop=FALSE]