R: Есть ли способ получить обозначение aa (bc), когда у меня есть значения a, b, c в отдельных столбцах? - PullRequest
1 голос
/ 23 октября 2019

Я рассчитал внутриклассовые корреляции для определенных переменных. Есть три важных значения, которые я хочу отобразить в таблице:

  • Имя переменной
  • Значение ICC
  • Нижняя граница
  • Верхняя граница

Теперь я создал таблицу в R с четырьмя столбцами рядом друг с другом

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? В противном случае мне нужно скопировать вставить все значения, чтобы достичь этого результата.

Ответы [ 3 ]

0 голосов
/ 23 октября 2019

Один вариант:

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 голосов
/ 23 октября 2019

Вот обратный путь:

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(), но вы бынужно использовать его отдельно пару раз, с разными разделителями, а затем в любом случае отдельно добавить правую скобку, так что ...

Создано в 2019-10-23 пакетом prex (v0.3.0)

0 голосов
/ 23 октября 2019

В R:

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

Я также призываю вас быть последовательными в том, используете ли вы пробел в "нижнем положении". Я скопировал имена столбцов в вашем вопросе, один из которых имеет пробел, а другой нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...