假设数据框是这样的:
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 循环。
最佳答案
通过简单的代数,你可以做到:
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 中,您经常会发现使用向量化运算符比 for 循环更容易(更少的打字和更少的思考)来进行这样的简单计算。在本例中,我们对整个向量执行了对 +
、/
和 floor
的调用,而不是在每个元素上循环和使用它们。
关于r - 根据现有变量的条件,使用 for 循环在 r 中创建新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31931533/