对于循环向数据框添加额外的行

时间:2018-10-18 23:25:44

标签: r for-loop dataframe infinite-loop

您好,我对编程界和数据科学领域也很陌生,我正在尝试自己的方法。

我正在尝试为数据帧中的列分配值,并使用for循环,以便将数据帧分为十组,并且每组中的每一行都分配一个等级,从而将行1到10分配为等级1和第11到20行指定为等级2,依此类推。子集数据集的原始维度为100 * 6

我的数据框看起来像 Data Frame

我写的代码是:

   x <- round(nrow(subset) / 10)
   a=1
   for(j in 1:10){
    for(i in a:x){
      subset[i, "rank"] = j
    }
    j = j + 1
    a = x + 1
    x = x * j
    }

但是,循环无限运行,并继续向数据帧添加其他行。我不得不手动停止循环,子集数据帧的结果维数为17926 * 6。

请帮助我了解编写循环时出了什么问题。

P.S。子集是数据帧名称,而不是R中的子集函数

预先感谢!

2 个答案:

答案 0 :(得分:0)

怎么样呢?

subset$Rank <- ceiling(as.numeric(rownames(subset))/10)

as.numeric将行名转换为数字,将其除以10,然后四舍五入应该可以满足您的需求?让我知道我是否误会了。

答案 1 :(得分:0)

开始使用矢量化计算而不是循环可能会更好。这将为您将来提供帮助。

例如:

df <- data.frame(x = 1:100)
df$rank <- (df$x-1)%/%10 + 1
df  

导致:

    x rank
1   1    1
2   2    1
3   3    1
4   4    1
5   5    1
6   6    1
7   7    1
8   8    1
9   9    1
10 10    1
11 11    2
12 12    2
13 13    2
14 14    2
15 15    2
16 16    2
17 17    2
18 18    2
19 19    2
20 20    2
21 21    3
22 22    3
23 23    3
24 24    3
25 25    3