[R] Conditionally replace multiple rows in a dataframe

Jeff Newmiller jdnewmil at dcn.davis.CA.us
Thu Nov 20 08:23:35 CET 2014


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.



More information about the R-help mailing list