1

如果我的数据框中有行 x,那么我想在 x 之后取行 (x+70) 或 70,并将该行添加到行 x。

这是一个例子:

     a b           a b a b
   x 2 3         x 2 3 4 5
   . . .
   . . .
x+70 4 5

有没有办法对任何数字(不仅仅是 70)执行此操作?

编辑:我忘了提到这一点,但我想对所有行都这样做,这样总共有 70 行。

4

4 回答 4

1

一个间隙为 3 而不是 70 的小示例,假设您对最后一行不感兴趣,这些行无论如何gap都会在“新”a 和 b 列中给出。NA

dd <- data.frame(a = sample(1:10, 10), b = sample(1:10, 10))
dd
gap <- 3
cbind(head(dd, -gap), c(tail(dd, -gap)))
于 2013-08-11T18:23:37.800 回答
0

不确定这是否是你所追求的,但如果你想要每 70 行,你可以使用seq

df[seq(from=1, to=nrow(df), by=70), ]

数据框在哪里df。代替from=1,您可以使用任何值x,如果您想要比 70 更短的周期,您可以改变by参数。

于 2013-08-11T17:30:40.807 回答
0

df如果数据框已命名且x为数字且行x+70存在,则以下结果为单行数据框:

cbind(df[x, ], df[x+70, ])

如果您必须经常或自动执行此操作,您可能希望将其包装在一个函数中以检查行是否x+70存在。

于 2013-08-11T16:19:42.797 回答
0

这是myrow允许您输入数据框、行号和增量的函数。

myrow<-function(df,x,y){
#df is my dataframe
#x is your row number
#y is the increment
#mydata is the desired dataframe

if (x>=nrow(df)){
cat("The value of x=",x, "is greater than number of rows of your dataframe=",nrow(df), "\n")
}else if ((x+y)>=nrow(df)){
cat("There is no row x+y=",x+y, "for this value of y=",y, "in your dataframe", "\n")
}else{
mydata<-cbind(df[x, ], df[x+y, ])
return(mydata)
}
}

#Testing the `myrow` function using the `mtcars` data in R

> myrow(mtcars,10,30)
There is no row x+y= 40 for this value of y= 30 in your dataframe 
> myrow(mtcars,34,10)
The value of x= 34 is greater than number of rows of your dataframe= 32 
> myrow(mtcars,2,10)
              mpg cyl disp  hp drat    wt  qsec vs am gear carb  mpg cyl  disp  hp drat   wt qsec vs am gear
Mazda RX4 Wag  21   6  160 110  3.9 2.875 17.02  0  1    4    4 16.4   8 275.8 180 3.07 4.07 17.4  0  0    3
              carb
Mazda RX4 Wag    3
于 2013-08-11T17:56:24.113 回答