我正在尝试找到一种快速方法,将IF语句应用于R中的整个列,以根据语句创建1&0; s和0的新列。具体来说,我想用降雨计算天数> 0为湿天(1),降雨天为0,为干天(0)。我的数据采用以下形式:
class TestDict(dict):
def __eq__(self, other):
print "other:", other
for key, val in self.items():
if callable(val):
return val(other[key])
else:
return val == other[key]
ref = TestDict(
a=5,
b=lambda x: x > 5
)
result = dict(
a=5,
b=9,
c=10
)
assert ref == result
assert result == ref
我创建了一个循环如下:
Day Month Year Rainfall
1 1 1961 2.5
2 1 1961 0
3 1 1961 3.1
4 1 1961 0
这很有效,但速度很慢。有更快的方法吗?
非常感谢。
答案 0 :(得分:5)
我们可以用+
包装到逻辑条件来强制转换为二进制向量。它会很快。
+(df$Rainfall >0)
或者,如果我们使用ifelse
,则无需循环,因为它是矢量化的
ifelse(df$Rainfall > 0, 1, 0)