【发布时间】:2019-04-11 19:02:11
【问题描述】:
我有一个数据框,其中包含一个 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
任何想法如何做到这一点?
【问题讨论】:
-
请提供一些样本数据和期望的结果,以便我们更好地帮助您。
-
谢谢 davsjob,我用一些示例数据编辑了这个问题。