3 votes

R : ajouter des valeurs différentes aux colonnes d'une liste de cadres de données

Si j'ai une liste comme :

list <- list( "1" = data.frame(time=1:3, temp = sample(11:13)),
              "3" = data.frame(time=1:3, temp = sample(11:13)))

list

$`1`
  time temp
1    1   11
2    2   12
3    3   13

$`3`
  time temp
1    1   11
2    2   12
3    3   13

Je veux maintenant ajouter une valeur de correction aux colonnes temp, +1 pour le cadre de données 1 et -1 pour le cadre de données 3, de sorte que le résultat soit le suivant :

$`1`
  time temp
1    1   12
2    2   13
3    3   14

$`3`
  time temp
1    1   10
2    2   11
3    3   12

Supposons en outre que j'ai plusieurs de ces listes, où parfois le dataframe 3 ou 1 peut manquer, ou même un dataframe 2 peut être inclus, ce qui nécessiterait son propre facteur de correction... J'ai essayé des choses étranges pour le dataframe 1 :

list <- lapply(list, function(x)   {x <- x$"1"$temp-1;x})

ou

list <- lapply(list, function(x)   {x <- x[x$temp+1,];x})

J'ai également essayé d'ajouter un seq_along pour l'autre dataframe de la liste... rien ne fonctionne, peut-être parce que je ne comprends pas bien la syntaxe...

2voto

BondedDust Points 105234

J'ai changé le nom de la structure de données en dflist. Il est tout simplement incorrect d'appeler une liste "liste". Vous avez également besoin d'une structure de données pour extraire les facteurs de correction associés, alors posons-en une avec les mêmes noms que "dflist" :

dflist <- list( "1" = data.frame(time=1:3, temp = sample(11:13)),
              "3" = data.frame(time=1:3, temp = sample(11:13)))

corrlist <- list("1" = 1, "3"=-1) 

# Replaced lapply with for loop
for( nam in names(dflist)) {
        dflist[[nam]]['temp'] <- dflist[[nam]]['temp'] +corrlist[[nam]]
                            }
 dflist

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X