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.