r - 使用 grep 函数在 R 中正确转换数据
问题描述
我正在尝试根据特定列中的值(即“向上”和“向下”)重塑我的数据。Up 和 Down 在数据框中的顺序不同,因此我很难将数据“转换”成正确的形状。
我尝试使用 cast 函数来移动数据,但我无法以一致(又名准确)的方式获得答案。
这是我的输入:
input = structure(list(X = 1:6, Report = c("Sales.csv", "Sales.csv",
"Sales.csv", "Sales.csv", "Sales.csv", "Sales.csv"), Shock = c("Currencies.USD_Up",
"Currencies.USD_Down", "Currencies.AUD_Up", "Currencies.AUD_Down",
"Currencies.EUR_Down", "Currencies.EUR_Up"), Result = c(-519375.9816,
-7388851.423, -42950.77683, -667.367063, -12819532.15, -138054.0061
), FX = c("USD", "USD", "AUD", "AUD", "EUR", "EUR")), class = "data.frame", row.names = c(NA,
-6L))
这是我的首选输出:
output = structure(list(X = 1:3, Report = c("Sales.csv", "Sales.csv",
"Sales.csv"), Shock = c("Currencies.USD", "Currencies.AUD", "Currencies.EUR"
), Currency = c("USD", "AUD", "EUR"), Up = c(-519375.9816, -42950.77683,
-138054.0061), Down = c(-7388851.423, -667.367063, -12819532.15
)), class = "data.frame", row.names = c(NA, -3L))
因为输入中的欧元数据的顺序不同,我似乎无法正确地制作数据形状。我试过使用 grep 函数来订购这个,但我不能让它工作。任何人都可以提出更好的方法吗?
解决方案
这是一种tidyverse
方法:
library(dplyr)
library(tidyr)
library(tibble)
input %>%
as_tibble() %>%
separate(Shock, c("Shock", "tmp"), sep = "_") %>%
rename(Currency = FX) %>%
select(-X) %>%
spread(tmp, Result) %>%
mutate(X = row_number()) %>%
select(X, Report, Shock, Currency, Up, Down)
推荐阅读
- winapi - 您可以将自定义消息添加到文件夹的 IFileOperation 警告消息吗?
- html - 如果 div 有边框,则不需要 1px 填充。仅在镀铬
- c - 如何在两个 Arduino Unos 之间通过 UART 发送和接收数据
- python - 提取所有行值并创建类似于 Count Vectorizer 的新列
- amazon-web-services - rclone - 如何列出 AWS S3 存储桶中包含最新文件的目录?
- r - 从 R 中的 EFA 输出创建数据框
- shell - 在 Linux 终端中 Ping
- sql - 在所有表中搜索字符串并按该字符串在一行中出现的次数排序(SQLite)
- javascript - 目前正在开发一个待办事项应用程序练习,但在保存和拉取 localStorage 逻辑方面陷入困境
- python - “不支持的操作数类型”错误消息