Преобразование списка символов в именованные числа в R - PullRequest
0 голосов
/ 26 апреля 2019

Я хочу создать фрейм данных с 3 столбцами.

#First column
name_list = c("ABC_D1", "ABC_D2", "ABC_D3", 
              "ABC_E1", "ABC_E2", "ABC_E3",
              "ABC_F1", "ABC_F2", "ABC_F3")

df1 = data.frame(C1 = name_list)

Эти имена в столбце 1 представляют собой набор именованных результатов функции cor.test.Второй столбец должен состоять из коэффициентов корреляции, которые я получаю, записывая оценку ABC_D1 $, оценку ABC_D2 $.

Моя проблема сейчас в том, что я не хочу добавлять оценку $ вручную к каждому имени в первом столбце.Я пробовал это:

df1$C2 = paste0(df1$C1, '$estimate')

Но это не работает, это только возвращает мне:

"ABC_D1$estimate", "ABC_D2$estimate", "ABC_D3$estimate", 
"ABC_E1$estimate", "ABC_E2$estimate", "ABC_E3$estimate",
"ABC_F1$estimate", "ABC_F2$estimate", "ABC_F3$estimate")

class(df1$C2)
[1] "character

Как я могу получить числовой результат для оценки ABC_D1 $ в моем фрейме данных?Как я могу преобразовать эти символы в именованные числа?3-й столбец должен содержать результаты $ p.value.

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

Как отмечает @DSGym, есть несколько проблем, в том числе то, что не очень удобно иметь список имен символов, и было бы лучше иметь список объектов вместо этого.

В любом случае,Я думаю, вы можете получить, где вы хотите, используя:

estimates <- lapply(name_list, function(dat) {
                          dat_l <- get(dat)
                          dat_l[["estimate"]]
                          }
                            )

cbind(name_list, estimates)

Это не очень рекомендуется , но с учетом этих предпосылок ...

1 голос
/ 26 апреля 2019

Хорошо, я думаю, теперь я знаю, что вам нужно.

eval(parse(text = paste0("ABC_D1", '$estimate')))

Вы соединяете две строки и используете функции parse и eval, чтобы получить свои результаты.

Вот как это сделать для всех ваших данных. Рамка:

name_list = c("ABC_D1", "ABC_D2", "ABC_D3", 
              "ABC_E1", "ABC_E2", "ABC_E3",
              "ABC_F1", "ABC_F2", "ABC_F3")

df1 = data.frame(C1 = name_list)

df1$C2 <- map_dbl(paste0(df1$C1, '$estimate'), function(x) eval(parse(text = x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...