R语言 从多个列中提取多数文本[重复]

kcugc4gi  于 2023-11-14  发布在  其他
关注(0)|答案(3)|浏览(140)

这个问题已经有答案了

Find the most frequent value by row(4个回答)
How to find the statistical mode?(35个回答)
7天前关闭
我下面有一个数据框,希望从多个列中提取大部分条目。
假设从列a:e我想检查什么是大多数的条目,例如4或0,然后创建一个新列并将其更新为大多数的答案。

df <- data.table(id = 1:7,
                 reg = c("DD","BB","MA","CA","MN","KA","LA")         
                 , a = c(4,4,0,4,0,4,0)
                 , b = c(0,4,0,4,0,4,0)
                 , c = c(4,0,4,4,4,4,0)
                 , d = c(0,4,0,4,0,4,4)
                 , e = c(0,4,4,4,0,4,0)
                 , card = c("two","three","one","one","two","three","six")
                 
)

字符串
所需的输出应类似于


的数据

4szc88ey

4szc88ey1#

你可以试试下面的代码

d <- df[, 3:7]
v <- t(table(unlist(d), row(d)))
df$maj <- as.numeric(colnames(v))[max.col(v)]

字符串

df %>%
    mutate(maj = {
        (.) %>%
            select(a:e) %>%
            {
                t(table(unlist(.), row(.)))
            } %>%
            {
                as.numeric(colnames(.))[max.col(.)]
            }
    })


你将获得

> df
   id reg a b c d e  card maj
1:  1  DD 4 0 4 0 0   two   0
2:  2  BB 4 4 0 4 4 three   4
3:  3  MA 0 0 4 0 4   one   0
4:  4  CA 4 4 4 4 4   one   4
5:  5  MN 0 0 4 0 0   two   0
6:  6  KA 4 4 4 4 4 three   4
7:  7  LA 0 0 0 4 0   six   0

gjmwrych

gjmwrych2#

你可以试试这个:

fun <- function(x) {
  counts <- sort(table(x))
  return(names(counts[length(counts)]))
}

df %>%
  rowwise() %>%
  mutate(maj = fun(c_across(3:7)))

字符串

0wi1tuuw

0wi1tuuw3#

使用dplyr,我们可以使用行操作并使用统计 * 模式 * 创建新列。我们可以使用modeest包中的函数mfv(最频繁值),或手动计算模式,如建议的all across SO,包括此处其他答案中的解决方案。

library(dplyr)
library(modeest)

df |> 
    rowwise() |> 
    mutate(maj = mfv(c_across(a:e))) |> 
    ungroup()

# A tibble: 7 × 9
     id reg       a     b     c     d     e card    maj
  <int> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl>
1     1 DD        4     0     4     0     0 two       0
2     2 BB        4     4     0     4     4 three     4
3     3 MA        0     0     4     0     4 one       0
4     4 CA        4     4     4     4     4 one       4
5     5 MN        0     0     4     0     0 two       0
6     6 KA        4     4     4     4     4 three     4
7     7 LA        0     0     0     4     0 six       0

字符串

相关问题