将IF语句应用于R中的整个列

时间:2015-10-14 10:09:46

标签: r

我正在尝试找到一种快速方法,将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

这很有效,但速度很慢。有更快的方法吗?

非常感谢。

1 个答案:

答案 0 :(得分:5)

我们可以用+包装到逻辑条件来强制转换为二进制向量。它会很快。

+(df$Rainfall >0)

或者,如果我们使用ifelse,则无需循环,因为它是矢量化的

 ifelse(df$Rainfall > 0, 1, 0)