我希望能够从具有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
其中每列中的随机数仅使用一次,然后下一次迭代移至下一列。
没有“ data [,5] <-j data [,6] <-i”,它几乎可以实现我想要的功能,但是我真的很想拥有第5和第6列来标识i和j循环的哪个迭代这些行来自,因此我可以在每次迭代时分析数据(我正在使用该数据进行引导)。显然,上面的代码不起作用,但是我不确定如何使它完成我想做的事情。在当前版本中,它仅将最大计数器值添加到第5列和第6列的所有行。
非常感谢,本
以下代码解决了我的问题
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提供有用的评论!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句