【发布时间】:2014-08-20 17:36:17
【问题描述】:
我希望能够从具有 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]
非常感谢, 本
【问题讨论】:
-
做
data <- rbind(data, cbind(mydata[mydata[,4]== i,], i=i, j=j))否则你每次都在改变整列 -
感谢 MrFlick,工作完美!
-
请将其添加为答案并接受。
标签: r