这里使用起来很简单,但大多数关于apply / plyr / dplyr的文档都在解释更复杂的操作。
我想从this_tbl
> this_tbl
# A tibble: 3 x 2
x y
<dbl> <dbl>
1 42 999
2 0 0
3 1 0
这样每个值&gt; 0变为1,并且每个值&lt; = 0变为0。
> as_tibble(apply(this_tbl,2,function(x){ifelse(x>0, 1, 0)}))
# A tibble: 3 x 2
x y
<dbl> <dbl>
1 1 1
2 0 0
3 1 0
这样做很好,但有更优雅的方法吗?
答案 0 :(得分:1)
dplyr::mutate_all
已被across
副词所取代,尽管在此简单示例中不需要其他功能:
this_tbl %>% mutate(across(, function(x) ifelse(x > 0, 1, 0)))
答案 1 :(得分:0)
this_tbl %>%
mutate_all(function(x){ifelse(x>0, 1, 0)})
将函数应用于数据框中的所有列并返回结果。
greater_than_zero <- Vectorized(function(x){
ifelse(x > 0, 1, 0)
})
this_tbl %>%
mutate_all(greater_than_zero)
从技术上讲,这并不是将函数应用于“每个值”,而是作为一个整体应用于每个列,这要快得多。如果您希望逐个值地执行此操作,则可以制作该函数的矢量化版本。
{{1}}