嗨,谢谢你的阅读......
以下是编辑后我的数据集的一小部分示例:
data <- read.table(text=
"Site Year Day Variable Value Error Unit
1 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
1 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
2 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
2 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
3 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
3 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
4 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
4 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
5 2004 238 General-SolidsTSS 6.430e-01 1e-04 mg/L
5 2004 238 Phosphorus-OrthoP 3.000e-03 1e-04 mg/L
5 2004 238 Phosphorus-TP 4.000e-03 1e-04 mg/L
5 2004 238 Nitrogen-TN 5.000e-02 1e-03 mg/L
5 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
5 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
5 2004 238 General-Alkalinity 6.500e+01 1e-02 mg/L
6 2004 237 General-Alkalinity 5.540e+01 1e-03 mg/L
6 2004 237 General-SolidsTSS 1.292e+01 1e-03 mg/L
6 2004 237 Nitrogen-NO2 2.000e-03 1e-03 mg/L
6 2004 237 Nitrogen-NO3 2.200e-02 1e-03 mg/L
6 2004 237 Nitrogen-TDN 9.000e-02 1e-03 mg/L
6 2004 237 Phosphorus-TDP 4.000e-03 1e-03 mg/L
7 2004 238 General-Alkalinity 4.430e+01 1e-03 mg/L
7 2004 238 General-SolidsTSS 2.340e+00 1e-03 mg/L
7 2004 238 Nitrogen-NO2+NO3 4.800e-02 1e-03 mg/L
7 2004 238 Nitrogen-TDN 2.700e-01 1e-03 mg/L
7 2004 238 Phosphorus-TDP 6.000e-03 1e-03 mg/L
8 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
8 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
9 2010 194 Ca 1.450e+02 1e-01 mg/L
9 2010 194 General-Alkalinity 2.150e+02 5e-01 mg/L
9 2010 194 General-Hardness 4.800e+02 4e-01 mg/L
9 2010 194 SO4 2.540e+02 1e+01 mg/L
9 2010 194 Bi 5.000e-07 1e-06 mg/L
9 2010 194 Sn 2.500e-06 5e-06 mg/L
9 2010 194 Nitrogen-NO2 2.500e-03 5e-03 mg/L
9 2010 194 Nitrogen-NO3 2.500e-03 5e-03 mg/L
9 2010 194 Br 1.000e-02 2e-02 mg/L
9 2010 194 U 2.670e-03 5e-07 mg/L
9 2010 194 Ag 3.000e-06 1e-06 mg/L
9 2010 194 Be 1.300e-05 1e-06 mg/L
9 2010 194 Cd 5.400e-05 1e-06 mg/L
9 2010 194 Sb 8.500e-05 1e-06 mg/L
9 2010 194 Tl 1.700e-05 1e-06 mg/L
9 2010 194 Co 1.250e-03 2e-06 mg/L
9 2010 194 Mo 1.510e-03 5e-06 mg/L
9 2010 194 Pb 6.000e-05 5e-06 mg/L
9 2010 194 V 3.860e-04 5e-06 mg/L
9 2010 194 As 7.900e-04 1e-05 mg/L
9 2010 194 Cr 1.600e-04 1e-05 mg/L
9 2010 194 Li 3.230e-02 1e-05 mg/L", stringsAsFactors=F, header=T)
我需要将数据格式化为WIDE格式。我加入了重铸,dcast,reshape,reshape2,cbind,combine..etc。我很喜欢重铸,但远不是一个有用的数据集。
从上面的数据框中,我想实现这样的目标:
在此处查看图片链接* !
https://i.stack.imgur.com/YrO1U.jpg
目前,1 SITE的数据分布在多行中。我希望每一个SITE的所有数据都在一行中(即每个站点只在SITE列中出现一次。每个唯一的VARIABLE应该有一个列,以及相应的VALUE,ERROR和UNIT列,每个。我想大约有50个独特的VARIABLES,因此新数据框将有大约200个列。
我希望解释是充分的;但请不要犹豫要求澄清。
我怀疑一些经验丰富的用户有一个简单的答案。在此先感谢您的支持。干杯
答案 0 :(得分:0)
您可以按如下方式重塑数据:
加载数据
data <- read.table(text=
"Site Year Day Variable Value Error Unit
1 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
1 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
2 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
2 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
3 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
3 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
4 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
4 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
5 2004 238 General-SolidsTSS 6.430e-01 1e-04 mg/L
5 2004 238 Phosphorus-OrthoP 3.000e-03 1e-04 mg/L
5 2004 238 Phosphorus-TP 4.000e-03 1e-04 mg/L
5 2004 238 Nitrogen-TN 5.000e-02 1e-03 mg/L
5 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
5 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
5 2004 238 General-Alkalinity 6.500e+01 1e-02 mg/L
6 2004 237 General-Alkalinity 5.540e+01 1e-03 mg/L
6 2004 237 General-SolidsTSS 1.292e+01 1e-03 mg/L
6 2004 237 Nitrogen-NO2 2.000e-03 1e-03 mg/L
6 2004 237 Nitrogen-NO3 2.200e-02 1e-03 mg/L
6 2004 237 Nitrogen-TDN 9.000e-02 1e-03 mg/L
6 2004 237 Phosphorus-TDP 4.000e-03 1e-03 mg/L
7 2004 238 General-Alkalinity 4.430e+01 1e-03 mg/L
7 2004 238 General-SolidsTSS 2.340e+00 1e-03 mg/L
7 2004 238 Nitrogen-NO2+NO3 4.800e-02 1e-03 mg/L
7 2004 238 Nitrogen-TDN 2.700e-01 1e-03 mg/L
7 2004 238 Phosphorus-TDP 6.000e-03 1e-03 mg/L
8 2004 238 Nitrogen-NO3 1.000e-03 2e-03 mg/L
8 2004 238 Nitrogen-NO2 2.500e-03 5e-03 mg/L
9 2010 194 Ca 1.450e+02 1e-01 mg/L
9 2010 194 General-Alkalinity 2.150e+02 5e-01 mg/L
9 2010 194 General-Hardness 4.800e+02 4e-01 mg/L
9 2010 194 SO4 2.540e+02 1e+01 mg/L
9 2010 194 Bi 5.000e-07 1e-06 mg/L
9 2010 194 Sn 2.500e-06 5e-06 mg/L
9 2010 194 Nitrogen-NO2 2.500e-03 5e-03 mg/L
9 2010 194 Nitrogen-NO3 2.500e-03 5e-03 mg/L
9 2010 194 Br 1.000e-02 2e-02 mg/L
9 2010 194 U 2.670e-03 5e-07 mg/L
9 2010 194 Ag 3.000e-06 1e-06 mg/L
9 2010 194 Be 1.300e-05 1e-06 mg/L
9 2010 194 Cd 5.400e-05 1e-06 mg/L
9 2010 194 Sb 8.500e-05 1e-06 mg/L
9 2010 194 Tl 1.700e-05 1e-06 mg/L
9 2010 194 Co 1.250e-03 2e-06 mg/L
9 2010 194 Mo 1.510e-03 5e-06 mg/L
9 2010 194 Pb 6.000e-05 5e-06 mg/L
9 2010 194 V 3.860e-04 5e-06 mg/L
9 2010 194 As 7.900e-04 1e-05 mg/L
9 2010 194 Cr 1.600e-04 1e-05 mg/L
9 2010 194 Li 3.230e-02 1e-05 mg/L", stringsAsFactors=F, header=T)
使用data.table
进行投射library(data.table)
data$Variable <- gsub("\\+", "plus", data$Variable) #get rid of `+` for the sake of later pattern matching
setDT(data)
data2 <- dcast(data, Site+Year+Day~Variable, value.var = c("Value", "Error", "Unit"))
并重新排序列
order_cols <- c()
for(i in unique(data$Variable)){
order_cols <- append(order_cols, grep(paste0(i, "$"), names(data2)))
}
setcolorder(data2, c(1:3, order_cols))
在原始数据集(data
)中,列Variable
有29个唯一值。对于Variable
的每个级别,生成3列(值,错误和单位),其中包含87列。 3个列保持不变,即(Site
,Year
和Day
),这意味着您一起获得了90列的结果data2
。最后,每行代表每个站点。