如何根据另一列获取跨列范围最大值的值

时间:2018-03-16 15:28:49

标签: r

我有一个29行和26列的数据框,有很多NA。数据看起来有点像下面所示(在R studio上工作)

df <-

V1   V2   V3   V4   V5   V6   V7   V8   V9   V10

a1   b1   d    f    d    d    na   na   na    f

a1   b2   d    d    d    f    na   f    na   na

a1   b3   d    f    d    f    na   na   d    d

a2   c1   f    f    d    na   na   d    d    f

a2   c2   f    d    d    f    na   f    na   na

a2   c3   d    f    d    f    na   na   f    d

这里有V1-V10柱。 a1和a2是V1列中的2个不同值,

列V2中的

b1-b3是与V1中的a1和与a2相关的c1-c3相关的不同值。

列V3-V10我们在与a1和a2

相关的每一行中都有不同的值

我想要的结果如下 -

NewV1      max.occurrence(V3-V10)

 a1            d

 a2            f

总结我希望基于V1获得跨V3-V10列的最大出现值(max.occurrence(V3-V10))。注意=要排除NA。

2 个答案:

答案 0 :(得分:1)

使用data.table - 包的另一种可能性:

library(data.table)

melt(setDT(df),
     id = 1:2,
     na.rm = TRUE)[, .N, by = .(V1, value)
                   ][order(-N), .(max.occ = value[1]), by = V1]

给出:

   V1 max.occ
1: a1       d
2: a2       f

tidyverse - 包类似的逻辑:

library(dplyr)
library(tidyr)

df %>% 
  gather(k, v, V3:V10, na.rm = TRUE) %>% 
  group_by(V1, v) %>% 
  tally() %>% 
  arrange(-n) %>% 
  slice(1) %>% 
  select(V1, max.occ = v)

答案 1 :(得分:0)

如果你喜欢dplyr,这可行:

df %>% 
    gather("key", "value", V3:V10) %>%
    group_by(V1) %>% 
    dplyr::summarise(max.occurence = names(which.max(table(value))))

这给出了:

# A tibble: 2 x 2
  V1    max.occurence
  <fct> <chr>        
1 a1    d            
2 a2    f