【问题标题】:Filling specific duplicated values within the rows of a dataframe with NAs用 NA 填充数据框行中的特定重复值
【发布时间】:2013-01-23 06:35:12
【问题描述】:

对于我的数据框的每一行,我目前正在尝试选择所有等于 4 的重复值,以便将它们“等于”设置为 NA。

我的数据框是这样的:

dat <- read.table(text = "

   1  1  1  2  2  4  4  4  
   1  2  1  1  4  4  4  4", 

header=FALSE)

我需要得到的是:

   1  1  1  2  2  4   NA  NA
   1  2  1  1  4  NA  NA  NA 

我找到了有关如何消除重复行或列的信息,但我真的不知道如何在此处继续。非常感谢您的帮助

【问题讨论】:

  • 准确地说,你想删除所有的4s 除了第一个?

标签: r duplicates


【解决方案1】:

有时你会想要避免apply,因为它破坏了数据框对象的多类特性。这是by 方法:

> do.call(rbind, by(dat, rownames(dat), 
        function(line) {line[ duplicated(unlist(line)) & line==4 ] <- NA; line} ) )
  V1 V2 V3 V4 V5 V6 V7 V8
1  1  1  1  2  2  4 NA NA
2  1  2  1  1  4 NA NA NA

【讨论】:

    【解决方案2】:

    whichapply 在这里很有帮助。

    > dat <- t(apply(dat, 1, function(X) {X[which(X==4)][-1] <- NA ; X})) 
    > dat
    [1,]  1  1  1  2  2  4 NA NA
    [2,]  1  2  1  1  4 NA NA NA
    

    但可能有一种方法可以绕过此处必须使用转置 (t) 功能,谁能帮帮我?

    【讨论】:

    • 这就是 apply 的工作方式,并且被记录在案。我也觉得很奇怪。
    【解决方案3】:

    duplicated 可以通过这种方式与apply 一起使用:

    dat <- t(apply(dat, 1, function(x) {x[duplicated(x) & x == 4] <- NA ; x}))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 2021-08-31
      相关资源
      最近更新 更多