【发布时间】:2019-06-26 13:27:28
【问题描述】:
我有这个数据框:
source_data <- data.frame(
"date" = c("2018-01-01", "2018-01-01", "2018-02-01", "2018-02-01"),
"nr" = c(0, 1, 0, 1),
"marketing_fees" = c(500, 600, 800, 900),
"services_paid" = c(40, 50, 10, 30),
stringsAsFactors = F)
结果应该是这样的
result <- data.frame(
"date" = c("2018-01-01", "2018-01-01", "2018-01-01", "2018-01-01", "2018-02-01", "2018-02-01", "2018-02-01", "2018-02-01"),
"nr" = c(0, 0, 1, 1, 0, 0, 1, 1),
"income" = c(500, 40, 600, 50, 800, 10, 900, 30),
"source" = c("marketing", "services", "marketing", "services", "marketing", "services", "marketing", "services"),
stringsAsFactors = F)
我只能这样做
result <- rbind(
source_data %>%
filter(date == "2018-01-01") %>%
select(date, nr, income = marketing_fees) %>%
mutate(source = "marketing"),
source_data %>%
filter(date == "2018-01-01") %>%
select(date, nr, income = services_paid) %>%
mutate(source = "services"),
source_data %>%
filter(date == "2018-02-01") %>%
select(date, nr, income = marketing_fees) %>%
mutate(source = "marketing"),
source_data %>%
filter(date == "2018-02-01") %>%
select(date, nr, income = services_paid) %>%
mutate(source = "services")
)
上面的代码不仅丑陋,有很多重复的部分,我不能再这样使用它,因为我的数据框有大约 50 列和大量数据。没有这么多重复代码,如何实现结果数据框?
【问题讨论】:
-
据我所知,这是重塑和一些基本的文本处理。将发布答案作为证明。
-
请注意,这类似于here提到的重新打开的逻辑我看不出有什么区别。规则应该与每个人相似,而不是针对其他人