[R] Conditionally replace multiple rows in a dataframe

Bert Gunter gunter.berton at gene.com
Thu Nov 20 13:32:24 CET 2014


Sorry, just noticed the typo: it's is.na() of course.

-- Bert


Bert Gunter
Genentech Nonclinical Biostatistics
(650) 467-7374

"Data is not information. Information is not knowledge. And knowledge
is certainly not wisdom."
Clifford Stoll




On Thu, Nov 20, 2014 at 4:04 AM, Bert Gunter <bgunter at gene.com> wrote:
> No comment on whether Jeff's solution is correct or not, but for
> setting elements to NA, perhaps preferable, as it invokes the NA
> method for data frames -- see ?NA -- is:
>
> is,na(DF[ , c("value1","value2") ]) <- !DF$ToKeep
>
> (I would welcome comments from cogniscenti as to whether this is
> actually preferable and why or why not)
>
> Cheers,
> Bert
>
> Bert Gunter
> Genentech Nonclinical Biostatistics
> (650) 467-7374
>
> "Data is not information. Information is not knowledge. And knowledge
> is certainly not wisdom."
> Clifford Stoll
>
>
>
>
> On Wed, Nov 19, 2014 at 11:23 PM, Jeff Newmiller
> <jdnewmil at dcn.davis.ca.us> wrote:
>> 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.
>>
>> ______________________________________________
>> 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