基于先前列R的最频繁值创建新列

时间:2014-02-20 04:03:56

标签: r dataframe row frequency operation

我在数据框中有许多列,代表实验结果的复制品。

此处示例

        1a      2a      3a      4a      5a
1      154     152     154     156      NA
2      154     154     154      NA      NA
3      154     154     154     154      NA
4      154     154     154     154      NA
5      154      NA     154     154      NA
6       NA      NA      NA     154      NA
7      154     154      NA     154      NA
8      154     154      NA     154      NA
9      154      NA     154     150      NA
10     149     149      NA     149     149

我想要的是创建另一个列,其中包含每个其他列的值(> = 2)。

        1a      2a      3a      4a      5a    score 
1      154     152     154     156      NA    154
2      154     154     154      NA      NA    154
3      154     154     154     154      NA    154
4      154     154     154     154      NA    154
5      154      NA     154     154      NA    154
6       NA      NA      NA     154      NA     NA
7      154     154      NA     154      NA    154
8      154     154      NA     154      NA    154
9      154      NA     154     150      NA    154
10     149     149      NA     149     149    149

编辑:上面的修改示例来演示。 flodel使用该模式的答案最初是成功的,但即使只发生一次,它也会使用一个值。如果每行中没有2> x值,我希望它能够出现NA或字符串(这更容易)。

1 个答案:

答案 0 :(得分:1)

你不是在寻找中位数而是模式,这很容易定义你自己:

Mode <- function(x, min.freq = 1L) {
  f <- table(x)
  k <- f[f >= min.freq]
  if (length(k) > 0L) as.numeric(names(f)[which.max(f)]) else NA
}

test$score <- apply(test2, 1, Mode, min.freq = 2L)