更改 R 中的数据格式(不想回到 excel)?
Change Data format in R (don't feel like going back to excel)?
需要更改我的格式:
Lab Tobacco.Constituent Snus.Avg Snus.StDev HMH.Avg HMH.StDev HGT.Avg
1 labstat Nicotine [mug/g] 24836 804 2514.0 149.0 5175.0
2 labstat Nornicotine [mug/g] 338 2 70.6 0.8 108.0
3 labstat Anabasine [mug/g] 106 1 0.0 0.0 0.0
....
收件人:
Lab Tobacco.Constituent Type Avg St.Dev
labstat Nicotine [mug/g] Snus 24836 804
labstat Nicotine [mug/g] HMH 804 2514.0
……等等……
这是使用 tidyr
中的 pivot_longer
和 pivot_wider
的解决方案:
tidyr::pivot_wider(
tidyr::pivot_longer(df, cols = 3:7,
names_sep = "\.",
names_to = c("type", "measure")),
names_from = "measure")
#> # A tibble: 9 x 5
#> Lab Tobacco.Constituent type Avg StDev
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 labstat Nicotine [mug/g] Snus 24836 804
#> 2 labstat Nicotine [mug/g] HMH 2514 149
#> 3 labstat Nicotine [mug/g] HGT 5175 NA
#> 4 labstat Nornicotine [mug/g] Snus 338 2
#> 5 labstat Nornicotine [mug/g] HMH 70.6 0.8
#> 6 labstat Nornicotine [mug/g] HGT 108 NA
#> 7 labstat Anabasine [mug/g] Snus 106 1
#> 8 labstat Anabasine [mug/g] HMH 0 0
#> 9 labstat Anabasine [mug/g] HGT 0 NA
数据
df <- structure(list(Lab = c("labstat", "labstat", "labstat"),
Tobacco.Constituent = c("Nicotine [mug/g]",
"Nornicotine [mug/g]", "Anabasine [mug/g]"), Snus.Avg = c(24836L,
338L, 106L), Snus.StDev = c(804L, 2L, 1L), HMH.Avg = c(2514,
70.6, 0), HMH.StDev = c(149, 0.8, 0), HGT.Avg = c(5175, 108,
0)), class = "data.frame", row.names = c("1", "2", "3"))
df
#> Lab Tobacco.Constituent Snus.Avg Snus.StDev HMH.Avg HMH.StDev HGT.Avg
#> 1 labstat Nicotine [mug/g] 24836 804 2514.0 149.0 5175
#> 2 labstat Nornicotine [mug/g] 338 2 70.6 0.8 108
#> 3 labstat Anabasine [mug/g] 106 1 0.0 0.0 0
由 reprex package (v0.3.0)
于 2020-08-07 创建
需要更改我的格式:
Lab Tobacco.Constituent Snus.Avg Snus.StDev HMH.Avg HMH.StDev HGT.Avg
1 labstat Nicotine [mug/g] 24836 804 2514.0 149.0 5175.0
2 labstat Nornicotine [mug/g] 338 2 70.6 0.8 108.0
3 labstat Anabasine [mug/g] 106 1 0.0 0.0 0.0
....
收件人:
Lab Tobacco.Constituent Type Avg St.Dev
labstat Nicotine [mug/g] Snus 24836 804
labstat Nicotine [mug/g] HMH 804 2514.0
……等等……
这是使用 tidyr
中的 pivot_longer
和 pivot_wider
的解决方案:
tidyr::pivot_wider(
tidyr::pivot_longer(df, cols = 3:7,
names_sep = "\.",
names_to = c("type", "measure")),
names_from = "measure")
#> # A tibble: 9 x 5
#> Lab Tobacco.Constituent type Avg StDev
#> <chr> <chr> <chr> <dbl> <dbl>
#> 1 labstat Nicotine [mug/g] Snus 24836 804
#> 2 labstat Nicotine [mug/g] HMH 2514 149
#> 3 labstat Nicotine [mug/g] HGT 5175 NA
#> 4 labstat Nornicotine [mug/g] Snus 338 2
#> 5 labstat Nornicotine [mug/g] HMH 70.6 0.8
#> 6 labstat Nornicotine [mug/g] HGT 108 NA
#> 7 labstat Anabasine [mug/g] Snus 106 1
#> 8 labstat Anabasine [mug/g] HMH 0 0
#> 9 labstat Anabasine [mug/g] HGT 0 NA
数据
df <- structure(list(Lab = c("labstat", "labstat", "labstat"),
Tobacco.Constituent = c("Nicotine [mug/g]",
"Nornicotine [mug/g]", "Anabasine [mug/g]"), Snus.Avg = c(24836L,
338L, 106L), Snus.StDev = c(804L, 2L, 1L), HMH.Avg = c(2514,
70.6, 0), HMH.StDev = c(149, 0.8, 0), HGT.Avg = c(5175, 108,
0)), class = "data.frame", row.names = c("1", "2", "3"))
df
#> Lab Tobacco.Constituent Snus.Avg Snus.StDev HMH.Avg HMH.StDev HGT.Avg
#> 1 labstat Nicotine [mug/g] 24836 804 2514.0 149.0 5175
#> 2 labstat Nornicotine [mug/g] 338 2 70.6 0.8 108
#> 3 labstat Anabasine [mug/g] 106 1 0.0 0.0 0
由 reprex package (v0.3.0)
于 2020-08-07 创建