我在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))
任何帮助都是最欢迎的。 问候 斯蒂芬
答案 0 :(得分:1)
从您的问题中尚不清楚您正在处理哪种对象,但这看起来像:
Capital_Structure
的data.frame读入R,但是这样做的方式好像第一行数据都有标题如果是这样,您可以使用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"