Hi,
This is the input data frame:
###############################################
df.1 = read.table(header=T,text="
id gender WMC_alcohol WMC_caffeine WMC_no.drug RT_alcohol RT_caffeine
RT_no.drug
1 1 female 3.7 3.7 3.9 488 236 371
2 2 female 6.4 7.3 7.9 607 376 349
3 3 female 4.6 7.4 7.3 643 226 412
4 4 male 6.4 7.8 8.2 684 206 252
5 5 female 4.9 5.2 7.0 593 262 439
6 6 male 5.4 6.6 7.2 492 230 464
7 7 male 7.9 7.9 8.9 690 259 327
8 8 male 4.1 5.9 4.5 486 230 305
9 9 female 5.2 6.2 7.2 686 273 327
10 10 female 6.2 7.4 7.8 645 240 498
")
###############################################
This is the desired output:
###############################################
id gender drug WMC RT
1 1 female alcohol 3.7 488
2 2 female alcohol 6.4 607
3 3 female alcohol 4.6 643
4 4 male alcohol 6.4 684
5 5 female alcohol 4.9 593
6 6 male alcohol 5.4 492
7 7 male alcohol 7.9 690
8 8 male alcohol 4.1 486
9 9 female alcohol 5.2 686
10 10 female alcohol 6.2 645
11 1 female caffeine 3.7 236
12 2 female caffeine 7.3 376
###############################################
I know some melt and cast magic is required. But I was unable to sort it
myself.
Here are the dput versions:
Input Data Frame
###############################################> dput(df.1)
structure(list(id = 1:10, gender = structure(c(1L, 1L, 1L, 2L,
1L, 2L, 2L, 2L, 1L, 1L), .Label = c("female", "male"), class
= "factor"),
WMC_alcohol = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2,
6.2), WMC_caffeine = c(3.7, 7.3, 7.4, 7.8, 5.2, 6.6, 7.9,
5.9, 6.2, 7.4), WMC_no.drug = c(3.9, 7.9, 7.3, 8.2, 7, 7.2,
8.9, 4.5, 7.2, 7.8), RT_alcohol = c(488L, 607L, 643L, 684L,
593L, 492L, 690L, 486L, 686L, 645L), RT_caffeine = c(236L,
376L, 226L, 206L, 262L, 230L, 259L, 230L, 273L, 240L), RT_no.drug c(371L,
349L, 412L, 252L, 439L, 464L, 327L, 305L, 327L, 498L)), .Names
c("id",
"gender", "WMC_alcohol", "WMC_caffeine",
"WMC_no.drug", "RT_alcohol",
"RT_caffeine", "RT_no.drug"), class =
"data.frame", row.names = c("1",
"2", "3", "4", "5", "6",
"7", "8", "9", "10"))
Output Data Frame
###############################################> dput(df.output)
structure(list(id = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
1L, 2L), gender = structure(c(1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L,
1L, 1L, 1L, 1L), .Label = c("female", "male"), class =
"factor"),
drug = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L), .Label = c("alcohol", "caffeine"), class =
"factor"),
WMC = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2, 6.2,
3.7, 7.3), RT = c(488L, 607L, 643L, 684L, 593L, 492L, 690L,
486L, 686L, 645L, 236L, 376L)), .Names = c("id",
"gender",
"drug", "WMC", "RT"), class =
"data.frame", row.names = c("1",
"2", "3", "4", "5", "6",
"7", "8", "9", "10", "11",
"12"))
Cheers !
[[alternative HTML version deleted]]
I see your desired output has rather fewer data than the input data frame.
Instead of making us pore over a bunch of numbers, can you explain exactly
what filtering you wish to do to get the specific subset
of {male/female} {alcohol/caffeine} you're trying to get?
BHM wrote> Hi,
>
> This is the input data frame:
>
> ###############################################
> df.1 = read.table(header=T,text="
> id gender WMC_alcohol WMC_caffeine WMC_no.drug RT_alcohol RT_caffeine
> RT_no.drug
> 1 1 female 3.7 3.7 3.9 488 236 371
> 2 2 female 6.4 7.3 7.9 607 376 349
> 3 3 female 4.6 7.4 7.3 643 226 412
> 4 4 male 6.4 7.8 8.2 684 206 252
> 5 5 female 4.9 5.2 7.0 593 262 439
> 6 6 male 5.4 6.6 7.2 492 230 464
> 7 7 male 7.9 7.9 8.9 690 259 327
> 8 8 male 4.1 5.9 4.5 486 230 305
> 9 9 female 5.2 6.2 7.2 686 273 327
> 10 10 female 6.2 7.4 7.8 645 240 498
> ")
> ###############################################
>
> This is the desired output:
> ###############################################
> id gender drug WMC RT
> 1 1 female alcohol 3.7 488
> 2 2 female alcohol 6.4 607
> 3 3 female alcohol 4.6 643
> 4 4 male alcohol 6.4 684
> 5 5 female alcohol 4.9 593
> 6 6 male alcohol 5.4 492
> 7 7 male alcohol 7.9 690
> 8 8 male alcohol 4.1 486
> 9 9 female alcohol 5.2 686
> 10 10 female alcohol 6.2 645
> 11 1 female caffeine 3.7 236
> 12 2 female caffeine 7.3 376
> ###############################################
>
> I know some melt and cast magic is required. But I was unable to sort it
> myself.
>
> Here are the dput versions:
>
> Input Data Frame
> ###############################################
>> dput(df.1)
> structure(list(id = 1:10, gender = structure(c(1L, 1L, 1L, 2L,
> 1L, 2L, 2L, 2L, 1L, 1L), .Label = c("female", "male"),
class = "factor"),
> WMC_alcohol = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2,
> 6.2), WMC_caffeine = c(3.7, 7.3, 7.4, 7.8, 5.2, 6.6, 7.9,
> 5.9, 6.2, 7.4), WMC_no.drug = c(3.9, 7.9, 7.3, 8.2, 7, 7.2,
> 8.9, 4.5, 7.2, 7.8), RT_alcohol = c(488L, 607L, 643L, 684L,
> 593L, 492L, 690L, 486L, 686L, 645L), RT_caffeine = c(236L,
> 376L, 226L, 206L, 262L, 230L, 259L, 230L, 273L, 240L), RT_no.drug >
c(371L,
> 349L, 412L, 252L, 439L, 464L, 327L, 305L, 327L, 498L)), .Names >
c("id",
> "gender", "WMC_alcohol", "WMC_caffeine",
"WMC_no.drug", "RT_alcohol",
> "RT_caffeine", "RT_no.drug"), class =
"data.frame", row.names = c("1",
> "2", "3", "4", "5", "6",
"7", "8", "9", "10"))
>
>
> Output Data Frame
> ###############################################
>> dput(df.output)
> structure(list(id = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
> 1L, 2L), gender = structure(c(1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L,
> 1L, 1L, 1L, 1L), .Label = c("female", "male"), class =
"factor"),
> drug = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
> 2L, 2L), .Label = c("alcohol", "caffeine"), class =
"factor"),
> WMC = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2, 6.2,
> 3.7, 7.3), RT = c(488L, 607L, 643L, 684L, 593L, 492L, 690L,
> 486L, 686L, 645L, 236L, 376L)), .Names = c("id",
"gender",
> "drug", "WMC", "RT"), class =
"data.frame", row.names = c("1",
> "2", "3", "4", "5", "6",
"7", "8", "9", "10", "11",
"12"))
>
>
> Cheers !
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@
> mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
--
View this message in context:
http://r.789695.n4.nabble.com/Help-with-Cast-Function-tp4681381p4681384.html
Sent from the R help mailing list archive at Nabble.com.
On Nov 29, 2013, at 9:42 AM, Burhan ul haq wrote:> Hi, > > This is the input data frame: > > ############################################### > df.1 = read.table(header=T,text=" > id gender WMC_alcohol WMC_caffeine WMC_no.drug RT_alcohol RT_caffeine > RT_no.drug > 1 1 female 3.7 3.7 3.9 488 236 371 > 2 2 female 6.4 7.3 7.9 607 376 349 > 3 3 female 4.6 7.4 7.3 643 226 412 > 4 4 male 6.4 7.8 8.2 684 206 252 > 5 5 female 4.9 5.2 7.0 593 262 439 > 6 6 male 5.4 6.6 7.2 492 230 464 > 7 7 male 7.9 7.9 8.9 690 259 327 > 8 8 male 4.1 5.9 4.5 486 230 305 > 9 9 female 5.2 6.2 7.2 686 273 327 > 10 10 female 6.2 7.4 7.8 645 240 498 > ") > ############################################### > > This is the desired output: > ############################################### > id gender drug WMC RT > 1 1 female alcohol 3.7 488 > 2 2 female alcohol 6.4 607 > 3 3 female alcohol 4.6 643 > 4 4 male alcohol 6.4 684 > 5 5 female alcohol 4.9 593 > 6 6 male alcohol 5.4 492 > 7 7 male alcohol 7.9 690 > 8 8 male alcohol 4.1 486 > 9 9 female alcohol 5.2 686 > 10 10 female alcohol 6.2 645 > 11 1 female caffeine 3.7 236 > 12 2 female caffeine 7.3 376 > ############################################### > > I know some melt and cast magic is required. But I was unable to sort it > myself. ># this is base::reshape reshape(df.1, idvar=1:2, sep="_", direction="long", varying=names(df.1)[3:8])> Here are the dput versions: > > Input Data Frame > ############################################### >> dput(df.1) > structure(list(id = 1:10, gender = structure(c(1L, 1L, 1L, 2L, > 1L, 2L, 2L, 2L, 1L, 1L), .Label = c("female", "male"), class = "factor"), > WMC_alcohol = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2, > 6.2), WMC_caffeine = c(3.7, 7.3, 7.4, 7.8, 5.2, 6.6, 7.9, > 5.9, 6.2, 7.4), WMC_no.drug = c(3.9, 7.9, 7.3, 8.2, 7, 7.2, > 8.9, 4.5, 7.2, 7.8), RT_alcohol = c(488L, 607L, 643L, 684L, > 593L, 492L, 690L, 486L, 686L, 645L), RT_caffeine = c(236L, > 376L, 226L, 206L, 262L, 230L, 259L, 230L, 273L, 240L), RT_no.drug > c(371L, > 349L, 412L, 252L, 439L, 464L, 327L, 305L, 327L, 498L)), .Names > c("id", > "gender", "WMC_alcohol", "WMC_caffeine", "WMC_no.drug", "RT_alcohol", > "RT_caffeine", "RT_no.drug"), class = "data.frame", row.names = c("1", > "2", "3", "4", "5", "6", "7", "8", "9", "10")) > > > Output Data Frame > ############################################### >> dput(df.output) > structure(list(id = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, > 1L, 2L), gender = structure(c(1L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, > 1L, 1L, 1L, 1L), .Label = c("female", "male"), class = "factor"), > drug = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, > 2L, 2L), .Label = c("alcohol", "caffeine"), class = "factor"), > WMC = c(3.7, 6.4, 4.6, 6.4, 4.9, 5.4, 7.9, 4.1, 5.2, 6.2, > 3.7, 7.3), RT = c(488L, 607L, 643L, 684L, 593L, 492L, 690L, > 486L, 686L, 645L, 236L, 376L)), .Names = c("id", "gender", > "drug", "WMC", "RT"), class = "data.frame", row.names = c("1", > "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12")) > > > Cheers ! > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.David Winsemius Alameda, CA, USA