Thiago V. dos Santos
2014-Nov-20 04:03 UTC
[R] Conditionally replace multiple rows in a dataframe
Hi programming fellows, Please consider the following data frame: df <- structure(list(date = structure(c(1251350100.288, 1251351900,?1251353699.712, 1251355500.288, 1251357300, 1251359099.712), class = c("POSIXct",?"POSIXt")), mix.ratio.csi = c(442.78316237477, 436.757082063885,?425.742872761246, 395.770804307671, 386.758335309866, 392.115887652156), mix.ratio.licor = c(447.141491945547, 441.319548211994, 430.854166343173,?402.232640566763, 393.683007533694, 398.388336602215), ToKeep = c(FALSE,?FALSE, TRUE, TRUE, TRUE, TRUE)), .Names = c("date", "value1",?"value2", "ToKeep"), index = structure(integer(0), ToKeep = c(1L,?2L, 8L, 52L, 53L, 54L, 55L, 85L, 86L, 87L, 88L, 89L, 92L, 93L,?94L, 95L, 96L, 97L, 98L, 99L, 100L, 102L, 103L, 105L, 106L, 192L,?193L, 220L, 223L, 225L, 228L, 229L, 260L, 263L, 264L, 265L, 266L,?267L, 305L, 306L, 307L, 308L, 309L, 310L, 311L, 312L, 313L, 314L,?315L, 352L, 353L, 354L, 375L, 376L, 378L, 379L, 380L, 383L, 411L,?412L, 413L, 414L, 415L, 416L, 418L, 419L, 445L, 453L, 463L, 464L,?465L, 466L, 467L, 468L, 497L, 504L, 547L, 548L, 549L, 586L, 589L,?630L, 631L, 632L, 633L, 634L, 635L, 636L, 644L, 645L, 646L, 647L,?648L, 649L, 650L, 651L, 674L, 675L, 676L, 677L, 678L, 682L, 687L,?690L, 691L, 724L, 725L, 726L, 727L, 728L, 729L, 730L, 731L, 732L,?733L, 734L, 735L, 736L, 739L, 740L, 741L, 742L, 768L, 771L, 772L,?773L, 774L, 775L, 776L, 777L, 778L, 779L, 3L, 4L, 5L, 6L, 7L,?9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L,?22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L,?35L, 36L, 37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L,?48L, 49L, 50L, 51L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L,?65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L,?78L, 79L, 80L, 81L, 82L, 83L, 84L, 90L, 91L, 101L, 104L, 107L,?108L, 109L, 110L, 111L, 112L, 113L, 114L, 115L, 116L, 117L, 118L,?119L, 120L, 121L, 122L, 123L, 124L, 125L, 126L, 127L, 128L, 129L,?130L, 131L, 132L, 133L, 134L, 135L, 136L, 137L, 138L, 139L, 140L,?141L, 142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L, 150L, 151L,?152L, 153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L, 161L, 162L,?163L, 164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 172L, 173L,?174L, 175L, 176L, 177L, 178L, 179L, 180L, 181L, 182L, 183L, 184L,?185L, 186L, 187L, 188L, 189L, 190L, 191L, 194L, 195L, 196L, 197L,?198L, 199L, 200L, 201L, 202L, 203L, 204L, 205L, 206L, 207L, 208L,?209L, 210L, 211L, 212L, 213L, 214L, 215L, 216L, 217L, 218L, 219L,?221L, 222L, 224L, 226L, 227L, 230L, 231L, 232L, 233L, 234L, 235L,?236L, 237L, 238L, 239L, 240L, 241L, 242L, 243L, 244L, 245L, 246L,?247L, 248L, 249L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, 257L,?258L, 259L, 261L, 262L, 268L, 269L, 270L, 271L, 272L, 273L, 274L,?275L, 276L, 277L, 278L, 279L, 280L, 281L, 282L, 283L, 284L, 285L,?286L, 287L, 288L, 289L, 290L, 291L, 292L, 293L, 294L, 295L, 296L,?297L, 298L, 299L, 300L, 301L, 302L, 303L, 304L, 316L, 317L, 318L,?319L, 320L, 321L, 322L, 323L, 324L, 325L, 326L, 327L, 328L, 329L,?330L, 331L, 332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, 340L,?341L, 342L, 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, 351L,?355L, 356L, 357L, 358L, 359L, 360L, 361L, 362L, 363L, 364L, 365L,?366L, 367L, 368L, 369L, 370L, 371L, 372L, 373L, 374L, 377L, 381L,?382L, 384L, 385L, 386L, 387L, 388L, 389L, 390L, 391L, 392L, 393L,?394L, 395L, 396L, 397L, 398L, 399L, 400L, 401L, 402L, 403L, 404L,?405L, 406L, 407L, 408L, 409L, 410L, 417L, 420L, 421L, 422L, 423L,?424L, 425L, 426L, 427L, 428L, 429L, 430L, 431L, 432L, 433L, 434L,?435L, 436L, 437L, 438L, 439L, 440L, 441L, 442L, 443L, 444L, 446L,?447L, 448L, 449L, 450L, 451L, 452L, 454L, 455L, 456L, 457L, 458L,?459L, 460L, 461L, 462L, 469L, 470L, 471L, 472L, 473L, 474L, 475L,?476L, 477L, 478L, 479L, 480L, 481L, 482L, 483L, 484L, 485L, 486L,?487L, 488L, 489L, 490L, 491L, 492L, 493L, 494L, 495L, 496L, 498L,?499L, 500L, 501L, 502L, 503L, 505L, 506L, 507L, 508L, 509L, 510L,?511L, 512L, 513L, 514L, 515L, 516L, 517L, 518L, 519L, 520L, 521L,?522L, 523L, 524L, 525L, 526L, 527L, 528L, 529L, 530L, 531L, 532L,?533L, 534L, 535L, 536L, 537L, 538L, 539L, 540L, 541L, 542L, 543L,?544L, 545L, 546L, 550L, 551L, 552L, 553L, 554L, 555L, 556L, 557L,?558L, 559L, 560L, 561L, 562L, 563L, 564L, 565L, 566L, 567L, 568L,?569L, 570L, 571L, 572L, 573L, 574L, 575L, 576L, 577L, 578L, 579L,?580L, 581L, 582L, 583L, 584L, 585L, 587L, 588L, 590L, 591L, 592L,?593L, 594L, 595L, 596L, 597L, 598L, 599L, 600L, 601L, 602L, 603L,?604L, 605L, 606L, 607L, 608L, 609L, 610L, 611L, 612L, 613L, 614L,?615L, 616L, 617L, 618L, 619L, 620L, 621L, 622L, 623L, 624L, 625L,?626L, 627L, 628L, 629L, 637L, 638L, 639L, 640L, 641L, 642L, 643L,?652L, 653L, 654L, 655L, 656L, 657L, 658L, 659L, 660L, 661L, 662L,?663L, 664L, 665L, 666L, 667L, 668L, 669L, 670L, 671L, 672L, 673L,?679L, 680L, 681L, 683L, 684L, 685L, 686L, 688L, 689L, 692L, 693L,?694L, 695L, 696L, 697L, 698L, 699L, 700L, 701L, 702L, 703L, 704L,?705L, 706L, 707L, 708L, 709L, 710L, 711L, 712L, 713L, 714L, 715L,?716L, 717L, 718L, 719L, 720L, 721L, 722L, 723L, 737L, 738L, 743L,?744L, 745L, 746L, 747L, 748L, 749L, 750L, 751L, 752L, 753L, 754L,?755L, 756L, 757L, 758L, 759L, 760L, 761L, 762L, 763L, 764L, 765L,?766L, 767L, 769L, 770L, 780L, 781L, 782L, 783L, 784L, 785L, 786L,?787L, 788L, 789L)), row.names = c(NA, 6L), class = "data.frame") I need to create a new data.frame with the following structure:? 1) if column 'ToKeep' is TRUE, then columns 'date', 'value1' and 'value2' remain the same; 2) if column 'ToKeep' is FALSE, then columns 'value1' e 'value2' receive NA (and 'date' remains the same). I have been trying to use ifelse so far, but still haven't found the right indexing procedure: df[, c(2,3)] <- lapply(df[, 4], function(x) ifelse(x == FALSE, NA, x)) Any suggestion??Greetings, -- Thiago V. dos Santos PhD student Land and Atmospheric Science University of Minnesota http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm Phone: (612) 323 9898 [[alternative HTML version deleted]]
Jeff Newmiller
2014-Nov-20 07:23 UTC
[R] Conditionally replace multiple rows in a dataframe
Hi. Your failure to post in plain text has nearly rendered your example code unusable. Please post in plain text, not HTML. Also, the ToKeep attribute was most of your example, yet was completely irrelevant. I recommend avoiding the variable name "df" as it is easily confused with the base function of that name. Assuming the data frame is in variable DF... DF[ !DF$ToKeep, c("value1","value2") ] <- NA should do it. --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. On November 19, 2014 8:03:28 PM PST, "Thiago V. dos Santos" <thi_veloso at yahoo.com.br> wrote:>Hi programming fellows, >Please consider the following data frame: >df <- structure(list(date = structure(c(1251350100.288, >1251351900,?1251353699.712, 1251355500.288, 1251357300, >1251359099.712), class = c("POSIXct",?"POSIXt")), mix.ratio.csi >c(442.78316237477, 436.757082063885,?425.742872761246, >395.770804307671, 386.758335309866, 392.115887652156), mix.ratio.licor >= c(447.141491945547, 441.319548211994, >430.854166343173,?402.232640566763, 393.683007533694, >398.388336602215), ToKeep = c(FALSE,?FALSE, TRUE, TRUE, TRUE, TRUE)), >.Names = c("date", "value1",?"value2", "ToKeep"), index >structure(integer(0), ToKeep = c(1L,?2L, 8L, 52L, 53L, 54L, 55L, 85L, >86L, 87L, 88L, 89L, 92L, 93L,?94L, 95L, 96L, 97L, 98L, 99L, 100L, 102L, >103L, 105L, 106L, 192L,?193L, 220L, 223L, 225L, 228L, 229L, 260L, 263L, >264L, 265L, 266L,?267L, 305L, 306L, 307L, 308L, 309L, 310L, 311L, 312L, >313L, 314L,?315L, 352L, 353L, 354L, 375L, 376L, 378L, 379L, 380L, 383L, >411L,?412L, 413L, 414L, 415L, 416L, 418L, 419L, 445L, 453L, 463L, >464L,?465L, 466L, 467L, 468L, 497L, 504L, 547L, 548L, 549L, 586L, >589L,?630L, 631L, 632L, 633L, 634L, 635L, 636L, 644L, 645L, 646L, >647L,?648L, 649L, 650L, 651L, 674L, 675L, 676L, 677L, 678L, 682L, >687L,?690L, 691L, 724L, 725L, 726L, 727L, 728L, 729L, 730L, 731L, >732L,?733L, 734L, 735L, 736L, 739L, 740L, 741L, 742L, 768L, 771L, >772L,?773L, 774L, 775L, 776L, 777L, 778L, 779L, 3L, 4L, 5L, 6L, 7L,?9L, >10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L,?22L, 23L, >24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L,?35L, 36L, 37L, >38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L,?48L, 49L, 50L, 51L, >56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L, 64L,?65L, 66L, 67L, 68L, 69L, >70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L,?78L, 79L, 80L, 81L, 82L, 83L, >84L, 90L, 91L, 101L, 104L, 107L,?108L, 109L, 110L, 111L, 112L, 113L, >114L, 115L, 116L, 117L, 118L,?119L, 120L, 121L, 122L, 123L, 124L, 125L, >126L, 127L, 128L, 129L,?130L, 131L, 132L, 133L, 134L, 135L, 136L, 137L, >138L, 139L, 140L,?141L, 142L, 143L, 144L, 145L, 146L, 147L, 148L, 149L, >150L, 151L,?152L, 153L, 154L, 155L, 156L, 157L, 158L, 159L, 160L, 161L, >162L,?163L, 164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 172L, >173L,?174L, 175L, 176L, 177L, 178L, 179L, 180L, 181L, 182L, 183L, >184L,?185L, 186L, 187L, 188L, 189L, 190L, 191L, 194L, 195L, 196L, >197L,?198L, 199L, 200L, 201L, 202L, 203L, 204L, 205L, 206L, 207L, >208L,?209L, 210L, 211L, 212L, 213L, 214L, 215L, 216L, 217L, 218L, >219L,?221L, 222L, 224L, 226L, 227L, 230L, 231L, 232L, 233L, 234L, >235L,?236L, 237L, 238L, 239L, 240L, 241L, 242L, 243L, 244L, 245L, >246L,?247L, 248L, 249L, 250L, 251L, 252L, 253L, 254L, 255L, 256L, >257L,?258L, 259L, 261L, 262L, 268L, 269L, 270L, 271L, 272L, 273L, >274L,?275L, 276L, 277L, 278L, 279L, 280L, 281L, 282L, 283L, 284L, >285L,?286L, 287L, 288L, 289L, 290L, 291L, 292L, 293L, 294L, 295L, >296L,?297L, 298L, 299L, 300L, 301L, 302L, 303L, 304L, 316L, 317L, >318L,?319L, 320L, 321L, 322L, 323L, 324L, 325L, 326L, 327L, 328L, >329L,?330L, 331L, 332L, 333L, 334L, 335L, 336L, 337L, 338L, 339L, >340L,?341L, 342L, 343L, 344L, 345L, 346L, 347L, 348L, 349L, 350L, >351L,?355L, 356L, 357L, 358L, 359L, 360L, 361L, 362L, 363L, 364L, >365L,?366L, 367L, 368L, 369L, 370L, 371L, 372L, 373L, 374L, 377L, >381L,?382L, 384L, 385L, 386L, 387L, 388L, 389L, 390L, 391L, 392L, >393L,?394L, 395L, 396L, 397L, 398L, 399L, 400L, 401L, 402L, 403L, >404L,?405L, 406L, 407L, 408L, 409L, 410L, 417L, 420L, 421L, 422L, >423L,?424L, 425L, 426L, 427L, 428L, 429L, 430L, 431L, 432L, 433L, >434L,?435L, 436L, 437L, 438L, 439L, 440L, 441L, 442L, 443L, 444L, >446L,?447L, 448L, 449L, 450L, 451L, 452L, 454L, 455L, 456L, 457L, >458L,?459L, 460L, 461L, 462L, 469L, 470L, 471L, 472L, 473L, 474L, >475L,?476L, 477L, 478L, 479L, 480L, 481L, 482L, 483L, 484L, 485L, >486L,?487L, 488L, 489L, 490L, 491L, 492L, 493L, 494L, 495L, 496L, >498L,?499L, 500L, 501L, 502L, 503L, 505L, 506L, 507L, 508L, 509L, >510L,?511L, 512L, 513L, 514L, 515L, 516L, 517L, 518L, 519L, 520L, >521L,?522L, 523L, 524L, 525L, 526L, 527L, 528L, 529L, 530L, 531L, >532L,?533L, 534L, 535L, 536L, 537L, 538L, 539L, 540L, 541L, 542L, >543L,?544L, 545L, 546L, 550L, 551L, 552L, 553L, 554L, 555L, 556L, >557L,?558L, 559L, 560L, 561L, 562L, 563L, 564L, 565L, 566L, 567L, >568L,?569L, 570L, 571L, 572L, 573L, 574L, 575L, 576L, 577L, 578L, >579L,?580L, 581L, 582L, 583L, 584L, 585L, 587L, 588L, 590L, 591L, >592L,?593L, 594L, 595L, 596L, 597L, 598L, 599L, 600L, 601L, 602L, >603L,?604L, 605L, 606L, 607L, 608L, 609L, 610L, 611L, 612L, 613L, >614L,?615L, 616L, 617L, 618L, 619L, 620L, 621L, 622L, 623L, 624L, >625L,?626L, 627L, 628L, 629L, 637L, 638L, 639L, 640L, 641L, 642L, >643L,?652L, 653L, 654L, 655L, 656L, 657L, 658L, 659L, 660L, 661L, >662L,?663L, 664L, 665L, 666L, 667L, 668L, 669L, 670L, 671L, 672L, >673L,?679L, 680L, 681L, 683L, 684L, 685L, 686L, 688L, 689L, 692L, >693L,?694L, 695L, 696L, 697L, 698L, 699L, 700L, 701L, 702L, 703L, >704L,?705L, 706L, 707L, 708L, 709L, 710L, 711L, 712L, 713L, 714L, >715L,?716L, 717L, 718L, 719L, 720L, 721L, 722L, 723L, 737L, 738L, >743L,?744L, 745L, 746L, 747L, 748L, 749L, 750L, 751L, 752L, 753L, >754L,?755L, 756L, 757L, 758L, 759L, 760L, 761L, 762L, 763L, 764L, >765L,?766L, 767L, 769L, 770L, 780L, 781L, 782L, 783L, 784L, 785L, >786L,?787L, 788L, 789L)), row.names = c(NA, 6L), class = "data.frame") >I need to create a new data.frame with the following structure:? >1) if column 'ToKeep' is TRUE, then columns 'date', 'value1' and >'value2' remain the same; >2) if column 'ToKeep' is FALSE, then columns 'value1' e 'value2' >receive NA (and 'date' remains the same). >I have been trying to use ifelse so far, but still haven't found the >right indexing procedure: >df[, c(2,3)] <- lapply(df[, 4], function(x) ifelse(x == FALSE, NA, x)) >Any suggestion??Greetings, >-- >Thiago V. dos Santos >PhD student >Land and Atmospheric Science >University of Minnesota >http://www.laas.umn.edu/CurrentStudents/MeettheStudents/ThiagodosSantos/index.htm >Phone: (612) 323 9898 > [[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.