在 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