在 R 中更改数据帧结构
Changing data frame structure in R
在 R 中:
我需要更改 df 的格式。数据框目前看起来像:
long lat cld tmin tmax presence
-78.68224 -0.029785 1.927959 0.1321229 0.5416985 1
-75.89100 -5.373100 -0.4832732 0.1596707 0.5800908 1
但我需要它看起来像这样,所有变量都分配了正确的值:
lat lon presence variable value
0.029785 -78.68224 1 cld 1.927959
5.373100 -75.89100 1 cld -0.4832732
0.029785 -78.68224 1 tmin 0.1321229
5.373100 -75.89100 1 tmin 0.1596707
... .... ... .... ...
0.029785 -78.68224 1 tmax. 0.5416985
这是提供的示例行,但我不知道如何将它应用到我的 df,因为我没有“数据”列或对象来调用这些值。
df.gg <- reshape::melt(df.gg@data,id.vars=c("lat","lon","presence"),variable.name="variable")
我相信这就是您所需要的?您可以旋转所有列,但您可以选择排除的列除外:
> tidyr::pivot_longer(dat, -c(long, lat, presence), names_to="variable")
# A tibble: 6 x 5
long lat presence variable value
<dbl> <dbl> <int> <chr> <dbl>
1 -78.7 -0.0298 1 cld 1.93
2 -78.7 -0.0298 1 tmin 0.132
3 -78.7 -0.0298 1 tmax 0.542
4 -75.9 -5.37 1 cld -0.483
5 -75.9 -5.37 1 tmin 0.160
6 -75.9 -5.37 1 tmax 0.580
data.table
library(data.table)
long <- melt(setDT(df.gg), id.vars= c("lat","long","presence"), variable.name="variable")
查看 r2Evans 的评论:
reshape2::melt(dat, c("lat", "long", "presence"))
输出:
lat long presence variable value
1: -0.029785 -78.68224 1 cld 1.9279590
2: -5.373100 -75.89100 1 cld -0.4832732
3: -0.029785 -78.68224 1 tmin 0.1321229
4: -5.373100 -75.89100 1 tmin 0.1596707
5: -0.029785 -78.68224 1 tmax 0.5416985
6: -5.373100 -75.89100 1 tmax 0.5800908
数据:
df.gg <- structure(list(long = c(-78.68224, -75.891), lat = c(-0.029785,
-5.3731), cld = c(1.927959, -0.4832732), tmin = c(0.1321229,
0.1596707), tmax = c(0.5416985, 0.5800908), presence = c(1, 1
)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))
您可以从 here
获取一些样本
library(tidyr)
data_long <- gather(df.gg, condition, measurement, cld:tmax, factor_key=TRUE)
data_long
回答
# A tibble: 6 x 5
long lat presence condition measurement
<dbl> <dbl> <dbl> <fct> <dbl>
1 -78.7 -0.0298 1 cld 1.93
2 -75.9 -5.37 1 cld -0.483
3 -78.7 -0.0298 1 tmin 0.132
4 -75.9 -5.37 1 tmin 0.160
5 -78.7 -0.0298 1 tmax 0.542
6 -75.9 -5.37 1 tmax 0.580
在 R 中:
我需要更改 df 的格式。数据框目前看起来像:
long lat cld tmin tmax presence
-78.68224 -0.029785 1.927959 0.1321229 0.5416985 1
-75.89100 -5.373100 -0.4832732 0.1596707 0.5800908 1
但我需要它看起来像这样,所有变量都分配了正确的值:
lat lon presence variable value
0.029785 -78.68224 1 cld 1.927959
5.373100 -75.89100 1 cld -0.4832732
0.029785 -78.68224 1 tmin 0.1321229
5.373100 -75.89100 1 tmin 0.1596707
... .... ... .... ...
0.029785 -78.68224 1 tmax. 0.5416985
这是提供的示例行,但我不知道如何将它应用到我的 df,因为我没有“数据”列或对象来调用这些值。
df.gg <- reshape::melt(df.gg@data,id.vars=c("lat","lon","presence"),variable.name="variable")
我相信这就是您所需要的?您可以旋转所有列,但您可以选择排除的列除外:
> tidyr::pivot_longer(dat, -c(long, lat, presence), names_to="variable")
# A tibble: 6 x 5
long lat presence variable value
<dbl> <dbl> <int> <chr> <dbl>
1 -78.7 -0.0298 1 cld 1.93
2 -78.7 -0.0298 1 tmin 0.132
3 -78.7 -0.0298 1 tmax 0.542
4 -75.9 -5.37 1 cld -0.483
5 -75.9 -5.37 1 tmin 0.160
6 -75.9 -5.37 1 tmax 0.580
data.table
library(data.table)
long <- melt(setDT(df.gg), id.vars= c("lat","long","presence"), variable.name="variable")
查看 r2Evans 的评论:
reshape2::melt(dat, c("lat", "long", "presence"))
输出:
lat long presence variable value
1: -0.029785 -78.68224 1 cld 1.9279590
2: -5.373100 -75.89100 1 cld -0.4832732
3: -0.029785 -78.68224 1 tmin 0.1321229
4: -5.373100 -75.89100 1 tmin 0.1596707
5: -0.029785 -78.68224 1 tmax 0.5416985
6: -5.373100 -75.89100 1 tmax 0.5800908
数据:
df.gg <- structure(list(long = c(-78.68224, -75.891), lat = c(-0.029785,
-5.3731), cld = c(1.927959, -0.4832732), tmin = c(0.1321229,
0.1596707), tmax = c(0.5416985, 0.5800908), presence = c(1, 1
)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))
您可以从 here
获取一些样本library(tidyr)
data_long <- gather(df.gg, condition, measurement, cld:tmax, factor_key=TRUE)
data_long
回答
# A tibble: 6 x 5
long lat presence condition measurement
<dbl> <dbl> <dbl> <fct> <dbl>
1 -78.7 -0.0298 1 cld 1.93
2 -75.9 -5.37 1 cld -0.483
3 -78.7 -0.0298 1 tmin 0.132
4 -75.9 -5.37 1 tmin 0.160
5 -78.7 -0.0298 1 tmax 0.542
6 -75.9 -5.37 1 tmax 0.580