假设数据框是这样的:
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循环。
答案 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
,而不是在每个元素上循环并使用它们。