R:当我在单独的列中具有值a,b,c时,有没有一种方法来获得a(b-c)表示法?

问题描述 投票:0回答:3

我已经为某些变量计算了类内相关性。我想在表格中显示三个重要值:

  • 变量名
  • ICC值
  • 下界
  • 上限

我现在在R中创建了一个表格,其中4列彼此相邻

Name    ICCvalue     Lower bound    Upperbound   
a        0.90           0.46          0.98  

但是,对于我的科学论文,我想使用以下表示法

Name    ICCvalue (Lowerbound-Upperbound)   
a       0.90 (0.46 - 0.98)   

是否可以通过这种方式将数据从R导出到excel?否则,我必须复制粘贴所有值才能获得此结果。

r excel
3个回答
0
投票

在R中:

df[, "(Lowerbound - Upperbound)"] = sprintf("(%s - %s)", df[, "Lower bound"], df[, "Upperbound"])

我也鼓励您在是否使用“下限”中保持一致。我在您的问题中复制了列名,其中一个具有空格,而一个没有。


0
投票

一个选项:

within(df, `(Lowerbound-Upperbound)` <- paste("(", Lower bound , "-", Upperbound, ")", sep=''))

# Name ICCvalue Lowerbound Upperbound (Lowerbound-Upperbound)
# 1    a      0.9       0.46       0.98            (0.46-0.98)

0
投票

这里是整理方式:

library(writexl)
library(tidyverse)

data <- tribble(
  ~Name, ~ICCvalue, ~`Lower bound`, ~Upperbound,   
  "a",   0.90,      0.46,           0.98  
)

(new_data <- data %>% transmute(
  Name, 
  `ICCvalue (Lowerbound-Upperbound)` = 
    str_glue_data(., "{ICCvalue} ({`Lower bound`} - {Upperbound})")
))
#> # A tibble: 1 x 2
#>   Name  `ICCvalue (Lowerbound-Upperbound)`
#>   <chr> <glue>                            
#> 1 a     0.9 (0.46 - 0.98)

write_xlsx(new_data, "result.xlsx")

"{ICCvalue} ({`Lower bound`} - {Upperbound})"是您想要的值最简洁的表达,对吗? glue函数利用此类表达式,并在括号中的值通过名称进行引用并插入。这里唯一棘手的部分是被引用的值对象是值的向量-整个列-因此您必须使用str_glue_data(),第一个参数是引用的向量在内部的列表,环境等。这里的.实际上是data,因为这是将对象传递给整个transmute()调用的对象。

transmute(),正如您所看到的,仅使用我已命名或定义的列就从data中创建了一个新表。即,这将删除我们不再需要的原始列。

还包括将结果输出到Excel的代码。

另一种简洁的方法是使用tidyr::unite(),但是您需要使用不同的分隔符分别使用几次,然后无论如何都要分别添加正确的括号,因此...

reprex package(v0.3.0)在2019-10-23创建

© www.soinside.com 2019 - 2024. All rights reserved.