首页 > 解决方案 > 如何使用 dplyr 将整数添加到 r 中的所有数字列

问题描述

我有一个数据框,其中包含一个 ID 列和多个包含密度测量的数字列。为了使密度呈正态分布,我需要记录日志,但因为我的密度值为 0,所以我需要将所有密度测量值增加 0.5,以免在记录转换时获得 Inf 数据点。我如何使用 dplyr 做到这一点?

样本数据:

  ID    `Image Tag` `CD3 Global Den… `CD8 Global Den… `CD20 Global De… `CD3 Tumour Den… `CD8 Tumour Den…
  <chr>       <dbl>            <dbl>            <dbl>            <dbl>            <dbl>            <dbl>
1 IM_10          NA           608.              755.            51.0             868.             1066. 
2 IM_1…          NA            27.5              69.3            0.550            30.4              75.2
3 IM_1…          NA            19.6              17.0            1.03             53.2              42.0
4 IM_1…          NA           109.               89.0           47.7             725.              594. 
5 IM_1…          NA           219.              171.             0.501           531.              416. 
6 IM_1…          NA             4.00              0              0                 5.94              0  

我尝试使用

df1 <- df %>% group_by(ID) %>% 
  summarise_all(funs(mean(., na.rm=TRUE))) %>% 
  mutate_at(which(sapply(., is.numeric)), funs(sum(0.5)))

但这会将我所有的数字列替换为 0.5,而不是在原始密度上添加 0.5。

  ID    `Image Tag` `CD3 Global Den… `CD8 Global Den… `CD20 Global De… `CD3 Tumour Den… `CD8 Tumour Den…
  <chr>       <dbl>            <dbl>            <dbl>            <dbl>            <dbl>            <dbl>
1 IM_10         0.5              0.5              0.5              0.5              0.5              0.5
2 IM_1…         0.5              0.5              0.5              0.5              0.5              0.5
3 IM_1…         0.5              0.5              0.5              0.5              0.5              0.5
4 IM_1…         0.5              0.5              0.5              0.5              0.5              0.5
5 IM_1…         0.5              0.5              0.5              0.5              0.5              0.5
6 IM_1…         0.5              0.5              0.5              0.5              0.5              0.5

任何想法如何做到这一点?

标签: rdplyr

解决方案


如果你只想添加一个 df%>% map_if(is.numeric, ~.+1)


推荐阅读