首页 文章

将函数应用于tibble中的每个值(并返回一个tibble)?

提问于
浏览
0

这里直截了当,但大多数关于apply / plyr / dplyr的文档都在解释更复杂的操作 .
我想从 this_tbl 创建一个新的tibble

> this_tbl
# A tibble: 3 x 2
      x     y
  <dbl> <dbl>
1    42   999
2     0     0
3     1     0

这样每个值> 0变为1,并且每个值<= 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

这样做很好,但是有更优雅的方法吗?

1 回答

  • 0

    dplyr::mutate_all 将函数应用于数据框中的所有列并返回结果 .

    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)
    

相关问题