R как получить одну строку текста из вывода - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть следующее в R: (myfile - это вывод)

>  Capital_Structure
       Total Debt to Total Equity  33.94
1     Total Debt to Total Capital  25.34
2      Total Debt to Total Assets  15.85
3               Interest Coverage  13.74
4        Long-Term Debt to Equity  32.71
5 Long-Term Debt to Total Capital  24.42
6         Long-Term Debt to Assets  0.15

Без записи этих данных в файл в моей файловой системе и последующего импорта строки из файла я не могу понятькак просто присвоить 33,94 (первое число в выводе) какой-то переменной.Я пытался использовать:

head(myfile, 0)
[1] Total Debt to Total Equity  33.94
<0 rows> (or 0-length row.names)

, но я не хочу, чтобы второй ряд информации, как я полагаю, является некоторой функцией stdio.Это кажется очень простым делом, но это сводит меня с ума, пытаясь разобраться в этом.

> dput(Capital_Structure)
structure(list(`Total Debt to Total Equity  33.94` = structure(c(6L, 
5L, 1L, 3L, 4L, 2L), .Label = c("Interest Coverage  13.74", "Long-Term Debt to Assets  0.15", 
"Long-Term Debt to Equity  32.71", "Long-Term Debt to Total Capital  24.42", 
"Total Debt to Total Assets  15.85", "Total Debt to Total Capital  25.34"
), class = "factor")), class = "data.frame", row.names = c(NA, 
-6L))

Любая помощь будет приветствоваться.С уважением, Стивен

1 Ответ

0 голосов
/ 20 февраля 2019

Из вашего вопроса не ясно, с каким объектом вы имеете дело, но похоже:

  • у вас было что-то вроде csv без заголовков
  • вы читаетеэто в R как data.frame, называемый Capital_Structure, но сделал так, как если бы первая строка данных имела заголовки
  • , теперь у вас есть data.frame, где 33,94 используется в качестве одного из имен столбцов.

Если это так, вы можете получить доступ к этим именам, используя names(Capital_Structure), чтобы получить все имена, и names(Capital_Structure)[2], чтобы получить только второе имя, то есть 33.94

btw - Rиспользует базу 1, а не базу 0 - поэтому второй элемент равен [2] и head(foo, 0) ничего не возвращает


РЕДАКТИРОВАТЬ :

Теперь, когда вы 'предоставив отрывок данных, я вижу, что Capital_Structure - это data.frame с 6 строками и 1 столбцом:

class(Capital_Structure) # what is it? a data.frame
dim(Capital_Structure) # how big? 6x1

Если вы хотите указать «число после последнего пробела», вы можетеиспользуйте жадное регулярное выражение, чтобы удалить все до последнего пробела:

gsub('^.* ', '', names(Capital_Structure))
[1] "33.94"

Это будет работать и для других примеров, которые вы добавили в комментарии:

> gsub('^.* ', '', "P/E Ratio (TTM) 13.28")
[1] "13.28"

Если у вас есть список data.frames, и вы хотите получить все имена, затем примените эту функцию извлечения, вы можете использовать lapply и анонимную функцию:

# example list; using data.table, bc base data.frame doesn't like spaces in names
library(data.table)
my_list <- list(data.table(`Total Debt to Total Equity  33.94`=1),
                data.table(`P/E Ratio (TTM) 13.28`=1))

# extract "thing after last space" from all names
lapply(my_list, function(x) gsub('^.* ', '', names(x)))

возвращает:

[[1]]
[1] "33.94"

[[2]]
[1] "13.28"
...