[R] Matrix anders indelen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • jdh009
  • Registratie: Juni 2002
  • Laatst online: 11-10 18:42

jdh009

FP ProMod
Topicstarter
Mijn vraag
Ik ben bezig om data om te zetten naar een dataframe dat ik makkelijk kan gebruiken om er statistische analyses op uit te voeren. Als input gebruik een dataframe dat ik heb gecreëerd met een special fotoanalyse programma. Deze is helaas niet perfect waardoor ik een functie heb geschreven om het dataframe goed te ordenen. Juiste types/classes, filteren van overbodige informatie en het toevoegen van de settings die ik haal uit de naam van het bestand. Hieruit komt het volgende (fictieve) resultaat:

Datefilenameeigenschapwaarde1waarde2setting1setting2setting3
01-01-2000001_1119IS100CV50EV0.jpgS. & al. (2007)1.012.03100500
01-01-2000001_1119IS100CV50EV0.jpgC. & C. (1995)4.056.03100500
01-01-2000001_1119IS50CV0EV2.jpgS. & al. (2007)1.052.035002


Nu wil een nieuw dataframe creëren die alle data gemakkelijk kan plotten. Het uiteindelijke doel is dit:

Datefilenamealle gebruikte settingswaarde
01-01-2000001_1119IS100CV50EV0.jpgS. & al. (2007)_kolomnaamwaarde1_100_50_01.01
01-01-2000001_1119IS100CV50EV0.jpgS. & al. (2007)_kolomnaamwaarde2_100_50_02.03
01-01-2000001_1119IS100CV50EV0.jpgC. & C. (1995)_kolomnaamwaarde1_100_50_04.05
01-01-2000001_1119IS100CV50EV0.jpgC. & C. (1995)_kolomnaamwaarde2_100_50_06.03
01-01-2000001_1119IS50CV0EV2.jpgS. & al. (2007)_kolomnaamwaarde1_50_0_21.05


Relevante software en hardware die ik gebruik
RStudio met R version 3.2.5

Ik heb het eerst met split geprobeerd maar dan krijg ik het niet voor elkaar.
S:
1
2
3
4
5
6
test <- split(einstein , einstein$eigenschap)

eigenschap1 <- test[[1]]
eigenschap2 <- test[[2]]
plot(eigenschap1$Date, eigenschap1$waarde1, type = "p" )
plot(eigenschap2$Date, eigenschap2$waarde1, type = "p" )


Ik heb nu wel de verschillende eigenschappen uit elkaar maar zit nu met twee dataframes die ik daarna toch weer moet samenvoegen.

Ik heb tevens de functie melt geprobeerd:

S:
1
2
x <- melt(einstein)
x 

https://stackoverflow.com...ivoting-rows-into-columns

Dan is dit het resultaat:
Afbeeldingslocatie: http://static.tweakers.net/ext/f/iItErtH1Ga0R3aJpvXUiVB0S/medium.png

"Each event is preceded by Prophecy. But without the hero, there is no Event." - Zurin Arctus, the Underking | "Ad Nocendum Potentes sumus." - Me, 30 November 1999

Beste antwoord (via jdh009 op 02-06-2016 11:40)


  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03 11:17
Kan vast en zeker beter / makkelijker, maar dit geeft een redelijk resultaat, met als enige dat de kolomnaam van waarde 1 of 2 achteraan wordt geplakt in plaats van middenin. (Ook dat is op te lossen, maar dat kun je vast zelf wel uitzoeken...)
S:
1
2
3
4
5
6
7
8
9
10
11
#df bevat het originele dataframe.
#Voeg kolom toe met gecombineerde waarden
df$combined <- paste(df$eigenschap, df$setting1, df$setting2, df$setting3, sep='_')
#verwijder de originele kolommen
dfsubset <- subset(df, select=-c(eigenschap, setting1, setting2, setting3))
#Melt de dataset
dfMelted <- melt(dfsubset)
#Voeg kolomnaam toe
dfMelted$combined <- paste(dfMelted$combined, dfMelted$variable, sep="_")
#verwijder kolom met kolomnaam
dfMelted <- subset(dfMelted, select=-c(variable))

Alle reacties


Acties:
  • Beste antwoord
  • 0 Henk 'm!

  • El_kingo
  • Registratie: Mei 2002
  • Laatst online: 17-03 11:17
Kan vast en zeker beter / makkelijker, maar dit geeft een redelijk resultaat, met als enige dat de kolomnaam van waarde 1 of 2 achteraan wordt geplakt in plaats van middenin. (Ook dat is op te lossen, maar dat kun je vast zelf wel uitzoeken...)
S:
1
2
3
4
5
6
7
8
9
10
11
#df bevat het originele dataframe.
#Voeg kolom toe met gecombineerde waarden
df$combined <- paste(df$eigenschap, df$setting1, df$setting2, df$setting3, sep='_')
#verwijder de originele kolommen
dfsubset <- subset(df, select=-c(eigenschap, setting1, setting2, setting3))
#Melt de dataset
dfMelted <- melt(dfsubset)
#Voeg kolomnaam toe
dfMelted$combined <- paste(dfMelted$combined, dfMelted$variable, sep="_")
#verwijder kolom met kolomnaam
dfMelted <- subset(dfMelted, select=-c(variable))

Acties:
  • 0 Henk 'm!

  • jdh009
  • Registratie: Juni 2002
  • Laatst online: 11-10 18:42

jdh009

FP ProMod
Topicstarter
El_kingo schreef op dinsdag 31 mei 2016 @ 15:34:
Kan vast en zeker beter / makkelijker, maar dit geeft een redelijk resultaat, met als enige dat de kolomnaam van waarde 1 of 2 achteraan wordt geplakt in plaats van middenin. (Ook dat is op te lossen, maar dat kun je vast zelf wel uitzoeken...)
S:
1
2
3
4
5
6
7
8
9
10
11
#df bevat het originele dataframe.
#Voeg kolom toe met gecombineerde waarden
df$combined <- paste(df$eigenschap, df$setting1, df$setting2, df$setting3, sep='_')
#verwijder de originele kolommen
dfsubset <- subset(df, select=-c(eigenschap, setting1, setting2, setting3))
#Melt de dataset
dfMelted <- melt(dfsubset)
#Voeg kolomnaam toe
dfMelted$combined <- paste(dfMelted$combined, dfMelted$variable, sep="_")
#verwijder kolom met kolomnaam
dfMelted <- subset(dfMelted, select=-c(variable))
Bedankt! Dat ie hem erachter plakt maakt niet uit, gezien ie dan nog steeds uniek is en ik daarna kan subsetten op de methode en er vervolgens per setting analyses op los kan laten. OM de datum en andere zaken te bewaren heb ik d=c("Date", "DOY", "picture.files", "th.hold", "settings") toegevoegd aan melt. Zie hieronder het resultaat.

S:
1
2
3
4
5
6
7
8
9
10
11
#df bevat het originele dataframe.
#Voeg kolom toe met gecombineerde waarden
einstein$settings <- paste(einstein$corrections, einstein$ISO, einstein$CV, einstein$EV, sep='_')
#verwijder de originele kolommen
dfsubset <- subset(einstein, select=-c(corrections, ISO, CV, EV))
#Melt de dataset
dfMelted <- melt(dfsubset, id=c("Date", "DOY", "picture.files", "th.hold", "settings"))
#Voeg kolomnaam toe
dfMelted$settings <- paste(dfMelted$settings, dfMelted$variable, sep="_")
#verwijder kolom met kolomnaam
dfMelted <- subset(dfMelted, select=-c(variable))

"Each event is preceded by Prophecy. But without the hero, there is no Event." - Zurin Arctus, the Underking | "Ad Nocendum Potentes sumus." - Me, 30 November 1999