我有以下data.frame
df = structure(list(HEADER = c("HOME_TRPM", "AWAY_TRPM", "HOME_TEAM","AWAY_TEAM"),
price = c("0.863104076023855", "-0.845186446996287","CHA", "NOP")),
.Names = c("HEADER", "price"), row.names = c(NA, 4L), class = "data.frame")
df
#> HEADER price
#> 1 HOME_TRPM 0.863104076023855
#> 2 AWAY_TRPM -0.845186446996287
#> 3 HOME_TEAM CHA
#> 4 AWAY_TEAM NOP
Run Code Online (Sandbox Code Playgroud)
我想要转置.如何在不使用t()的情况下在dplyr中执行此操作?我试过了
df %>% tidyr::spread(HEADER , price)
Run Code Online (Sandbox Code Playgroud)
但它不会给出扁平结构,而是这样做:
structure(list(AWAY_TEAM = c(NA, NA, NA, "NOP"),
AWAY_TRPM = c(NA, "-0.845186446996287", NA, NA),
HOME_TEAM = c(NA, NA, "CHA", NA),
HOME_TRPM = c("0.863104076023855", NA, NA, NA)),
.Names = c("AWAY_TEAM", "AWAY_TRPM", "HOME_TEAM", "HOME_TRPM"),
class = "data.frame", row.names = c(NA, 4L))
Run Code Online (Sandbox Code Playgroud)
生成的data.frame应该是这样的:
structure(list(HOME_TRPM = "0.863104076023855",
AWAY_TRPM = "-0.845186446996287",
HOME_TEAM = "CHA",
AWAY_TEAM = "NOP"),
.Names = c("HOME_TRPM", "AWAY_TRPM", "HOME_TEAM", "AWAY_TEAM"),
row.names = c(NA, -1L), class = "data.frame"))
Run Code Online (Sandbox Code Playgroud)
jer*_*ycg 17
我想你想要tidyr
而不是dplyr
:
library(tidyr)
library(dplyr)
df %>% mutate(group = 1) %>%
spread(HEADER, price)
group AWAY_TEAM AWAY_TRPM HOME_TEAM HOME_TRPM
1 1 NOP -0.845186446996287 CHA 0.863104076023855
Run Code Online (Sandbox Code Playgroud)
使用此功能,您可以指定分组 - 您可以select(-group)
稍后添加以将其删除.
lit*_*ird 15
spread
已退休,tidyr
现在建议使用pivot_wider()
:
library(tidyverse)
df %>%
pivot_wider(names_from = HEADER, values_from = price)
Run Code Online (Sandbox Code Playgroud)
小智 7
使用tibble
package (of tidyverse
family),您可以消除t()
.
df_t = as_tibble(t(df), rownames = "row_names")
Run Code Online (Sandbox Code Playgroud)
他们一定已经更新了 tidyr ,因为这是最初发布的,因为我认为它满足了您现在最初的要求:
\n\n> library(dplyr)\n> library(tidyr)\nWarning message:\npackage \xe2\x80\x98tidyr\xe2\x80\x99 was built under R version 3.4.4 \n> df\n HEADER price\n 1 HOME_TRPM 0.863104076023855\n 2 AWAY_TRPM -0.845186446996287\n 3 HOME_TEAM CHA\n 4 AWAY_TEAM NOP\n\n > tidyr::spread(df, HEADER, price)\n AWAY_TEAM AWAY_TRPM HOME_TEAM HOME_TRPM\n 1 NOP -0.845186446996287 CHA 0.863104076023855\n
Run Code Online (Sandbox Code Playgroud)\n\n如果您有更大的数据框,您可以随时收集然后传播:
\n\n> mdf <- data.frame(Things = c("Cookies","Cake","Knives","Kittens", "Politics"), Darkness = sample(1:5), Despair = sample(1:5), Defeat = sample(1:5))> mdf \n Things Darkness Despair Defeat\n1 Cookies 3 4 1\n2 Cake 2 2 5\n3 Knives 1 3 2\n4 Kittens 5 5 3\n5 Politics 4 1 4\n> mdf %>% tidyr::gather(Idea, Warning_Level, Darkness:Defeat)\n Things Idea Warning_Level\n1 Cookies Darkness 3\n2 Cake Darkness 2\n3 Knives Darkness 1\n4 Kittens Darkness 5\n5 Politics Darkness 4\n6 Cookies Despair 4\n7 Cake Despair 2\n8 Knives Despair 3\n9 Kittens Despair 5\n10 Politics Despair 1\n11 Cookies Defeat 1\n12 Cake Defeat 5\n13 Knives Defeat 2\n14 Kittens Defeat 3\n15 Politics Defeat 4\n> mdf %>% tidyr::gather(Idea, Warning_Level, Darkness:Defeat) %>% tidyr::spread(Things, Warning_Level)\n Idea Cake Cookies Kittens Knives Politics\n1 Darkness 2 3 5 1 4\n2 Defeat 5 1 3 2 4\n3 Despair 2 4 5 3 1\n
Run Code Online (Sandbox Code Playgroud)\n