根据现有变量的条件,使用for循环在r中创建一个新变量

时间:2015-08-11 00:57:54

标签: r loops

假设数据框是这样的:

df <- data.frame(x = c(1,7,8,15,24,100,9,19,128))

如何创建满足以下条件的新变量:

y = 1 if 1<=x<=7
y = 2 if 8<=x<=14
y = 3 if 15<=x<=21
...
y = k if 1+7*(k-1)<= x<= 7+7*(k-1)

这样我就可以拥有像这样的新数据框

df <- data.frame(y = c(1,1,2,3,4,15, 2,3, 19))   

我想知道在这种情况下是否可以应用for循环。

1 个答案:

答案 0 :(得分:4)

通过简单代数,您可以:

df$y <- floor((df$x+6)/7)
df
#     x  y
# 1   1  1
# 2   7  1
# 3   8  2
# 4  15  3
# 5  24  4
# 6 100 15
# 7   9  2
# 8  19  3
# 9 128 19

在R中,你会发现使用矢量化运算符比使用这样的简单计算的循环更容易(更少打字和更少思考)。在这种情况下,我们在整个向量上调用了+/floor,而不是在每个元素上循环并使用它们。