R如何从输出中获取一行文本

时间:2019-02-20 06:46:20

标签: r row selection

我在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 :(得分:1)

从您的问题中尚不清楚您正在处理哪种对象,但这看起来像:

  • 您有类似csv的标题,但没有标题
  • 您将其作为名为Capital_Structure的data.frame读入R,但是这样做的方式好像第一行数据都有标题
  • 现在您有一个data.frame,其中33.94被用作列名之一。

如果是这样,您可以使用names(Capital_Structure)访问这些名称以获取所有名称,并使用names(Capital_Structure)[2]访问仅第二个名称,即33.94

btw-R使用基数1,而不是基数0-因此第二个元素是[2],head(foo, 0)不返回任何内容


编辑

现在您已经提供了数据摘录,我可以看到Capital_Structure是一个6行1列的data.frame:

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"