[英]dplyr mutate by row names
I have some data and I am trying to run some very basic calculations based on row names. 我有一些数据,我试图根据行名运行一些非常基本的计算。 I basically want to add together
Total Cash Flow From Operating Activities
+ Capital Expenditures
from the row names using dplyr and just store them as a new row. 我基本上想使用dplyr将行
Total Cash Flow From Operating Activities
+行名称的Capital Expenditures
加在一起,并将它们存储为新行。 The below code eventually does what I want but its quite bulky and I am trying to create it in one pipe function not two. 下面的代码最终实现了我想要的功能,但是它相当庞大,我试图在一个管道函数(而不是两个)中创建它。
CFt <- as.data.frame(t(CF))
library(dplyr)
FCF <- NULL
FCF <- CFt %>%
select(`Total Cash Flow From Operating Activities`, `Capital Expenditures`)
FCF <- FCF %>%
rownames_to_column('Firms') %>%
mutate(FCF = `Total Cash Flow From Operating Activities` + `Capital Expenditures`) %>%
column_to_rownames('Firms') %>%
t()
Data: 数据:
CF <- structure(list(GE2017 = c(-5786000, 7359000, 5568000, 1551000,
987000, 747000, NA, 10426000, -7371000, NA, 5891000, 2322000,
-8650000, NA, -8952000, 1006000, -19146000, 891000, -5507000),
GE2016 = c(8831000, 7139000, -19373000, 1514000, 3034000,
-1389000, NA, -244000, -7199000, NA, -10250000, 49202000,
-8806000, NA, -58411000, -485000, -89131000, -1146000, -41319000
), GE2015 = c(-6126000, 6509000, 21411000, -52000, -1537000,
-314000, NA, 19891000, -7309000, NA, -5316000, 59488000,
-9295000, NA, -57546000, -8114000, -76054000, -3464000, -138000
), GE2014 = c(15233000, 6423000, 8788000, -1913000, 50000,
-872000, NA, 27709000, -7134000, NA, 406000, -5034000, -8852000,
NA, -30190000, 23304000, -16956000, -3492000, 2224000), GOOG2017 = c(12662000,
6899000, 8284000, -3768000, 1121000, NA, 3682000, 37091000,
-13184000, -19448000, 1419000, -31401000, NA, NA, -86000,
-3366000, -8298000, 405000, -2203000), GOOG2016 = c(19478000,
6100000, 7158000, -2578000, 333000, NA, 2420000, 36036000,
-10212000, -18229000, -1978000, -31165000, NA, NA, -1335000,
-3304000, -8332000, -170000, -3631000), GOOG2015 = c(16348000,
5024000, 5609000, -2094000, 246000, NA, 1618000, 26572000,
-9950000, -13635000, 75000, -23711000, NA, NA, -23000, -2422000,
-4225000, -434000, -1798000), GOOG2014 = c(14136000, 4601000,
3615000, -1641000, 261000, NA, 1461000, 23024000, -11014000,
-6222000, 628000, -21055000, NA, NA, -18000, -2069000, -2087000,
-433000, -551000), NVDA2018 = c(3047000, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA),
NVDA2017 = c(1666000, 187000, 473000, -321000, 184000, -375000,
-167000, 1672000, -176000, -619000, -5000, -793000, -261000,
NA, 1315000, -24000, 291000, NA, 1170000), NVDA2016 = c(614000,
197000, 386000, -32000, -11000, 66000, -74000, 1175000, -86000,
-339000, 18000, -4e+05, -213000, 120000, 1315000, 4000, -676000,
NA, 99000), NVDA2015 = c(631000, 220000, 230000, -49000,
-27000, -95000, -32000, 906000, -122000, -625000, -1000,
-727000, -186000, 154000, 1315000, 12000, -834000, NA, -655000
)), .Names = c("GE2017", "GE2016", "GE2015", "GE2014", "GOOG2017",
"GOOG2016", "GOOG2015", "GOOG2014", "NVDA2018", "NVDA2017", "NVDA2016",
"NVDA2015"), row.names = c("Net Income", "Depreciation", "Adjustments To Net Income",
"Changes In Accounts Receivables", "Changes In Liabilities",
"Changes In Inventories", "Changes In Other Operating Activities",
"Total Cash Flow From Operating Activities", "Capital Expenditures",
"Investments", "Other Cash flows from Investing Activities",
"Total Cash Flows From Investing Activities", "Dividends Paid",
"Sale Purchase of Stock", "Net Borrowings", "Other Cash Flows from Financing Activities",
"Total Cash Flows From Financing Activities", "Effect Of Exchange Rate Changes",
"Change In Cash and Cash Equivalents"), class = "data.frame")
If we use bind_rows
, it will strip off the row names and assigns default row numbers. 如果使用
bind_rows
,它将删除行名并分配默认行号。 So, we are using rbind
因此,我们正在使用
rbind
library(tidyverse)
CF %>%
rownames_to_column('rn') %>%
filter(rn %in% c( "Total Cash Flow From Oprating Activities" ,
"Capital Expenditures" )) %>%
summarise_at(-1, sum, na.rm = TRUE) %>%
`row.names<-`(., 'TotalCashFlowOPAc+CapitalExpend') %>%
rbind(CF, .)
Slightly different solution than @akrun's 与@akrun的解决方案略有不同
library(tibble)
library(dplyr)
CF %>%
rownames_to_column('rn') %>%
filter(rn %in% c('Total Cash Flow From Operating Activities',
'Capital Expenditures')) %>%
group_by(rn) %>%
summarize_all(sum) %>%
as.data.frame() %>%
column_to_rownames('rn') %>%
rbind(., FCF = colSums(.))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.