我希望能够从包含4列的现有数据框中创建一个包含6列的新数据框。当循环工作时,两个额外的列应该是计数器(i和j)的值。
我的草案代码如下
a是二进制,
b是明确的
c是一个数字(在这种情况下是1到200)
d是一个数字(在这个例子中是1到5,在现实生活中是1到2500)
#### make an example of mydata
a<- c(0,0,0,0,0,0,0,0,0,0,1,1,0,1)
b<- c("a","b","a","b","b","c","a","e","c","a","a","b","d","f")
c<- c(20,30,40,40,54,76,23,23,78,23,34,1,88,1)
d<- c(1,1,1,2,2,2,3,3,4,5,5,5,5,5)
mydata<-data.frame(a,b,c,d)
## this just generates random numbers to randomly
##select row to bind together later
set.seed(1)
choose.test<- data.frame(matrix(NA, nrow = 20, ncol = 30))
for (i in 1:20)
{
choose.test[,i]<-sample(5, 20, replace = TRUE, prob = NULL)
#random selction of sites WITH replacment
}
# this is the bit I am having trouble with
data<- NULL
for( j in 1:10){
for (i in choose.test[,j])
{ data <- rbind(data, mydata[mydata[,4]== i,])
data[,5]<-j
data[,6]<-i
}}
在每个循环迭代中创建单独的数据帧(在第二个循环中使用i作为计数器)也是可以接受的,或者在我是r的新手时打开其他更好的建议。我也尝试使用assign
来做到这一点,但没有运气。
在每次迭代中,我需要将第4列中的所有行组合在一起,这些行的值等于1到5之间的随机数(在此示例中,无论如何在现实生活中它将在1到2500个站点之间)。这些随机数存储在称为choose.test
的数据帧中,其中每列中的随机数仅使用一次,然后下一次迭代移动到下一列。
没有&#34;数据[,5]&lt; -j data [,6]&lt; -i&#34;它做的几乎就是我想要的,但我真的想要第5和第6列来确定行和i循环的迭代,这样我就可以在每次迭代时分析数据(我用这个数据进行自举)。显然,上面的代码不起作用,但我不知道如何让它做我想要的。在当前版本中,它只是将最大计数器值添加到第5列和第6列的所有行。
非常感谢, 本
答案 0 :(得分:0)
以下代码修复了我的问题
data<- NULL
for( j in 1:10){
for (i in choose.test[,j])
{ data <- rbind(data, cbind(mydata[mydata[,4]== i,], i=i, j=j))}}
感谢MrFlick提供有用的评论!