我有一个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。
答案 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