J'ai un data.frame NOAA_OLR_TEST

NOAA_OLR_TEST <- structure(list(DATE_START = structure(c(1170720000, 1170806400,
1170892800, 1170979200, 1171065600, 1171152000, 1171238400, 1171324800,
1171411200, 1171497600), class = c("POSIXct", "POSIXt")), 
DATE_END = structure(c(1171065600,1171152000, 1171238400, 1171324800, 
1171411200, 1171497600, 1171584000,1171670400, 1171756800, 1171843200), 
class = c("POSIXct", "POSIXt")), LONGITUDE = c(-89.5, -89.5, -89.5, -89.5, 
-89.5, -88.5, -88.5,-88.5, -88.5, -88.5), LATITUDE = c(-179.5, -179.5, -179.5, 
-179.5,-179.5, -179.5, -179.5, -179.5, -179.5, -179.5), OLR_DATA_1 = c(150,146, 
146, 142, NA, 150, 158, 155, 143, 142), OLR_DATA_2 = c(146,146, 142, 141, 150, 
NA, 155, 143, 142, 138), OLR_DATA_3 = c(146,NA, 141, 150, 158, 155, 143, 142, 
138, 135), OLR_DATA_4 = c(142,141, 150, 158, 155, 143, 142, 138, 135, NA), 
OLR_DATA_5 = c(141,150, NA, 155, 143, 142, 138, 135, 140, 139)), 
.Names = c("DATE_START","DATE_END", "LONGITUDE", "LATITUDE", "OLR_DATA_1", 
"OLR_DATA_2","OLR_DATA_3", "OLR_DATA_4", "OLR_DATA_5"), row.names = c(NA,10L), 
class = "data.frame") 

Mon attente est de convertir les colonnes n ° 5 en n ° 9 des dataframes NOAA_OLR_TEST [5: 9] en liste

-2
Pan 24 nov. 2017 à 16:24

3 réponses

Meilleure réponse

Vous pouvez le faire avec data.table:

library(data.table)
setDT(NOAA_OLR_TEST)
NOAA_OLR_TEST[,xy.list:=list(OLR_DATA_1,OLR_DATA_2,OLR_DATA_3,OLR_DATA_4,OLR_DATA_5)]
NOAA_OLR_TEST[,(5:9):= NULL]

is.list(NOAA_OLR_TEST$xy.list)
[1] TRUE
0
Pierre Lapointe 24 nov. 2017 à 13:44

La question et les commentaires ultérieurs du PO prêtent à confusion sur le résultat attendu par le PO. Donc, je propose différentes variantes:

Renvoie une table data.table avec seulement les colonnes 5: 9

library(data.table)
NOAA_OLR_TEST_new <- setDT(NOAA_OLR_TEST)[, .SD, .SDcols = 5:9]
str(NOAA_OLR_TEST_new)
Classes ‘data.table’ and 'data.frame':    10 obs. of  5 variables:
 $ OLR_DATA_1: num  150 146 146 142 NA 150 158 155 143 142
 $ OLR_DATA_2: num  146 146 142 141 150 NA 155 143 142 138
 $ OLR_DATA_3: num  146 NA 141 150 158 155 143 142 138 135
 $ OLR_DATA_4: num  142 141 150 158 155 143 142 138 135 NA
 $ OLR_DATA_5: num  141 150 NA 155 143 142 138 135 140 139
 - attr(*, ".internal.selfref")=<externalptr>

Notez que data.frames et data.tables sont des formes spéciales d'une liste.

Renvoie les colonnes 5: 9 sous forme de liste

NOAA_OLR_TEST_new <- as.list(setDT(NOAA_OLR_TEST)[, .SD, .SDcols = 5:9])
str(NOAA_OLR_TEST_new)
List of 5
 $ OLR_DATA_1: num [1:10] 150 146 146 142 NA 150 158 155 143 142
 $ OLR_DATA_2: num [1:10] 146 146 142 141 150 NA 155 143 142 138
 $ OLR_DATA_3: num [1:10] 146 NA 141 150 158 155 143 142 138 135
 $ OLR_DATA_4: num [1:10] 142 141 150 158 155 143 142 138 135 NA
 $ OLR_DATA_5: num [1:10] 141 150 NA 155 143 142 138 135 140 139

Convertir les colonnes 5: 9 en colonne de liste d'une table de données

NOAA_OLR_TEST_new <- setDT(NOAA_OLR_TEST)[, .(as.list(.SD)), .SDcols = 5:9]
str(NOAA_OLR_TEST_new)
Classes ‘data.table’ and 'data.frame':    5 obs. of  1 variable:
 $ V1:List of 5
  ..$ : num  150 146 146 142 NA 150 158 155 143 142
  ..$ : num  146 146 142 141 150 NA 155 143 142 138
  ..$ : num  146 NA 141 150 158 155 143 142 138 135
  ..$ : num  142 141 150 158 155 143 142 138 135 NA
  ..$ : num  141 150 NA 155 143 142 138 135 140 139
  ..- attr(*, ".data.table.locked")= logi TRUE
 - attr(*, ".internal.selfref")=<externalptr>
0
Community 20 juin 2020 à 09:12

Utilisez simplement c(...):

lst <- c(NOAA_OLR_TEST)[5:9];
#lst;
#List of 5
# $ OLR_DATA_1: num [1:10] 150 146 146 142 NA 150 158 155 143 142
# $ OLR_DATA_2: num [1:10] 146 146 142 141 150 NA 155 143 142 138
# $ OLR_DATA_3: num [1:10] 146 NA 141 150 158 155 143 142 138 135
# $ OLR_DATA_4: num [1:10] 142 141 150 158 155 143 142 138 135 NA
# $ OLR_DATA_5: num [1:10] 141 150 NA 155 143 142 138 135 140 139

Ou avec lapply:

lst <- lapply(5:9, function(i) NOAA_OLR_TEST[, i])
0
Maurits Evers 24 nov. 2017 à 13:28
47474279