我有以下公司数据,我正在尝试连续计算价格*数量。我的问题是我似乎无法使用dplyr
访问行中的值。
x %>%
group_by(firm) %>%
select(Var) %>%
mutate(revenues = price*qty)
此处mutate()
函数正在寻找price
和qty
的列名。
任何有关如何格式化数据的建议都是很好的(我认为可能有更好的方法来处理数据)。
df <- structure(list(firm = c("firm1", "firm1", "firm1", "firm2", "firm2",
"firm2"), Var = c("price", "qty", "package", "price", "qty",
"package"), `2018-03` = c("199309", "10901", "210210", "25370",
"4535", ""), `2017-03` = c("143736", "7065", "150801", "21374",
"", "652"), `2016-03` = c("106818", "8878", "115696", "11738",
"", "451"), `2015-03` = c("108193", "17806", "125999", "11163",
"", "256"), `2014-03` = c("33045", "12029", "45074", "16006",
"", "191"), `2013-03` = c("30396", "2919", "33315", "4952", "",
"208"), `2012-03` = c("16857", "5480", "22337", "1315", "", "97"
), `2011-12` = c("3433", "8219", "11652", "559", "", ""), `2010-12` = c("3254",
"6803", "10057", "94", "", ""), `2009-12` = c("2749", "4518",
"7266", "38", "", "")), .Names = c("firm", "Var", "2018-03",
"2017-03", "2016-03", "2015-03", "2014-03", "2013-03", "2012-03",
"2011-12", "2010-12", "2009-12"), row.names = 5:10, class = "data.frame")
答案 0 :(得分:4)
有两个问题:
Elements.GroupJoin(ElementStates,
element => element.ElementID,
elementState => elementState.ElementID,
(element, elementState) =>
new { element, elementState = elementState.OrderByDescending(y => y.DateModified).FirstOrDefault() });
和price
列,因此无法使用mutate将这种不存在的列相乘要解决此问题,请将名称以qty
开头的列转换为数字,然后使用2
和gather
重塑数据,以使列如下所示,而不是列每年/每月。此时,我们有spread
和price
列,因此请执行计算。
qty
给予:
library(dplyr)
library(tidyr)
df %>%
mutate_at(vars(starts_with("2")), as.numeric) %>%
gather(date, value, -firm, -Var) %>%
spread(Var, value) %>%
mutate(revenue = price * qty)