【问题标题】:Add the counter value of nested for loop to each row while rbinding in r在 r 中 rbinding 时将嵌套 for 循环的计数器值添加到每一行
【发布时间】: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 &lt;- rbind(data, cbind(mydata[mydata[,4]== i,], i=i, j=j)) 否则你每次都在改变整列
  • 感谢 MrFlick,工作完美!
  • 请将其添加为答案并接受。

标签: r


【解决方案1】:

以下代码解决了我的问题

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 提供了有用的评论!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多