如果我的数据框中有一行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行。
答案 0 :(得分:1)
一个间隙为3而不是70的小例子,假设您对最后gap
行不感兴趣,无论如何都会在'new'a和b列中给出NA
。< / p>
dd <- data.frame(a = sample(1:10, 10), b = sample(1:10, 10))
dd
gap <- 3
cbind(head(dd, -gap), c(tail(dd, -gap)))
答案 1 :(得分:0)
如果数据框的名称为df
且x
为数字且行x+70
存在,则以下结果为单行数据框:
cbind(df[x, ], df[x+70, ])
如果必须经常或自动执行此操作,您可能希望将其包装在函数中以检查行x+70
是否存在。
答案 2 :(得分:0)
不确定这是否是您所追求的,但如果您想要每70行,您可以使用seq
df[seq(from=1, to=nrow(df), by=70), ]
其中df
是数据框。您可以使用任何值from=1
而不是x
,如果您想要一个比70更短的周期,则可以改变by
参数。
答案 3 :(得分: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