我希望将数据框架中两列和两列的数字组合在一起(列中的值是统计分析中置信区间的上、下值)。
我的推断方法是使用tidyr
和unite
函数。但以0.20为例,这个数字将被修改为0.2,也就是说,如果最后的小数等于零,这些小数就会被删除。在使用unite
时,有没有办法保持原始格式?
这里描述的是unite
:https://www.rdocumentation.org/packages/tidyr/versions/0.8.2/topics/unite
示例:
# Dataframe
df <- structure(list(est = c(0.05, -0.16, -0.02, 0, -0.11, 0.15, -0.26,
-0.23), low2.5 = c(0.01, -0.2, -0.05, -0.03, -0.2, 0.1, -0.3,
-0.28), up2.5 = c(0.09, -0.12, 0, 0.04, -0.01, 0.2, -0.22, -0.17
)), row.names = c(NA, 8L), class = "data.frame")
使用逗号作为分隔符,将(联合)列与unite
合并以获得信任
library(tidyr)
df <- unite(df, "CI", c("low2.5", "up2.5"), sep = ", ", remove=T)
给出
df
est CI
1 0.05 0.01, 0.09
2 -0.16 -0.2, -0.12
3 -0.02 -0.05, 0
4 0.00 -0.03, 0.04
5 -0.11 -0.2, -0.01
6 0.15 0.1, 0.2
7 -0.26 -0.3, -0.22
8 -0.23 -0.28, -0.17
我想要这个:
est CI
1 0.05 0.01, 0.09
2 -0.16 -0.20, -0.12
3 -0.02 -0.05, 0.00
4 0.00 -0.03, 0.04
5 -0.11 -0.20, -0.01
6 0.15 0.10, 0.20
7 -0.26 -0.30, -0.22
8 -0.23 -0.28, -0.17
我认为用Base来完成这个任务会很复杂(必须移动/重新排列多个组合列并删除旧列)。有什么方法可以避免unite
降低零值的小数呢?
发布于 2018-12-11 19:19:19
这样做是可行的:
library(tidyverse)
df %>%
mutate_if(is.numeric, ~format(., nsmall = 2)) %>%
unite("CI", c("low2.5", "up2.5"), sep = ", ", remove=T)
# est CI
#1 0.05 0.01, 0.09
#2 -0.16 -0.20, -0.12
#3 -0.02 -0.05, 0.00
#4 0.00 -0.03, 0.04
#5 -0.11 -0.20, -0.01
#6 0.15 0.10, 0.20
#7 -0.26 -0.30, -0.22
#8 -0.23 -0.28, -0.17
https://stackoverflow.com/questions/53730803
复制相似问题