我试图采取具有特定值针对每个类型的每个类型的元素的列gridNumber并且dcast它使得它创建从元件列3名独立的列.我不确定该怎么做.
dput:
df <- structure(list(date = structure(c(-25584, -25584, -25584, -25583,
-25583, -25583, -25582, -25582, -25582, -25581), class = "Date"),
year = c(1899, 1899, 1899, 1899, 1899, 1899, 1899, 1899,
1899, 1899), month = c(12, 12, 12, 12, 12, 12, 12, 12, 12,
12), day = c(15, 15, 15, 16, 16, 16, 17, 17, 17, 18), gridNumber = c(526228,
526228, 526228, 526228, 526228, 526228, 526229, 526229, 526229,
526229), element = c("PPT", "TMAX", "TMIN", "PPT", "TMAX",
"TMIN", "PPT", "TMAX", "TMIN", "PPT"), value = c(0, 43.4782,
21.7403, 0, 43.3297, 20.751, 0, 57.3625, 25.8157, 0.2105)), .Names = c("date",
"year", "month", "day", "gridNumber", "element", "value"), row.names = c(NA,
10L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
data.frame:
date year month day gridNumber element value
1 1899-12-15 1899 12 15 526228 PPT 0.0000
2 1899-12-15 1899 12 15 526228 TMAX 43.4782
3 1899-12-15 1899 12 15 526228 TMIN 21.7403
4 1899-12-16 1899 12 16 526228 PPT 0.0000
5 1899-12-16 1899 12 16 526228 TMAX 43.3297
6 1899-12-16 1899 12 16 526228 TMIN 20.7510
7 1899-12-17 1899 12 17 526229 PPT 0.0000
8 1899-12-17 1899 12 17 526229 TMAX 57.3625
9 1899-12-17 1899 12 17 526229 TMIN 25.8157
10 1899-12-18 1899 12 18 526229 PPT 0.2105
Run Code Online (Sandbox Code Playgroud)
dcast尝试:
newdat <- dcast(df, date ~ element)
Run Code Online (Sandbox Code Playgroud)
期望的输出列:
date year month day gridNumber PPT TMAX TMIN value
Run Code Online (Sandbox Code Playgroud)
akr*_*run 13
我们可以用dcast.该...上的LHS ~包括未在RHS,并在指定的所有变量value.var.
library(reshape2)
dcast(df, ...~element, value.var='value')
# date year month day gridNumber PPT TMAX TMIN
#1 1899-12-15 1899 12 15 526228 0.0000 43.4782 21.7403
#2 1899-12-16 1899 12 16 526228 0.0000 43.3297 20.7510
#3 1899-12-17 1899 12 17 526229 0.0000 57.3625 25.8157
#4 1899-12-18 1899 12 18 526229 0.2105 NA NA
Run Code Online (Sandbox Code Playgroud)
这可能不完全是您想要的,因为您有一个单独的值列。那么,PPT、TMAX 和 TMIN 下放什么?
dplyr以下是如何使用和将值放在适当的列下tidyr:
library(dplyr)
library(tidyr)
df1 %>%
spread(element,value)
date year month day gridNumber PPT TMAX TMIN
1 1899-12-15 1899 12 15 526228 0.0000 43.4782 21.7403
2 1899-12-16 1899 12 16 526228 0.0000 43.3297 20.7510
3 1899-12-17 1899 12 17 526229 0.0000 57.3625 25.8157
4 1899-12-18 1899 12 18 526229 0.2105 NA NA
Run Code Online (Sandbox Code Playgroud)
可以仅使用以下方式写成一行tidyr:
spread(df1,element,value)
Run Code Online (Sandbox Code Playgroud)