函数提取R中行中数字的频率

函数提取R中行中数字的频率,r,function,frequency,R,Function,Frequency,我需要一个函数,它检查df中每行值的频率,然后检查其中一个值是否出现6次或更多次,如果出现,则在新列中显示该值。如果不是,则改为在同一新列中写入“nope”。 在下例中:行中的值为1、2或3。因此,如果值1、2或3中的一个每行出现6次或更多次,则(1、2或3)中的任何一个值都必须出现在新列中。如果没有一个值在每行出现6次或更多次,则该新列中的值应为“nope”。 尝试使用为每行应用表函数 make_count_col <- function(x) { cnt <- apply(x

我需要一个函数,它检查df中每行值的频率,然后检查其中一个值是否出现6次或更多次,如果出现,则在新列中显示该值。如果不是,则改为在同一新列中写入“nope”。 在下例中:行中的值为1、2或3。因此,如果值1、2或3中的一个每行出现6次或更多次,则(1、2或3)中的任何一个值都必须出现在新列中。如果没有一个值在每行出现6次或更多次,则该新列中的值应为“nope”。

尝试使用为每行应用
函数

make_count_col <- function(x) {
  cnt <- apply(x, 1, table)
  x$newcolumn <- apply(cnt, 2, function(y) {
    if (max(y, na.rm = T) < 6)
      out <- 'nope'
    else
      out <- names(y)[which.max(y)]
    out
    })
  x
}

make_count\u col您可以检查
apply
table
亲爱的Ben,谢谢,但是我得到了“Dim(x)必须有正长度”错误,这基本上告诉我它不能应用:)将应用函数应用到对象cnt,因为对象cnt是一个列表。我尝试用“apply(x,1,table)”在函数外部创建cnt对象,但当我将其附加回数据帧时,它会创建一个带有向量的列,其中包含数字(如果发生),这会自然地将整个数据帧降级为一个列表,我无法进一步应用max函数。您能否提供一个更好的示例,说明您将什么作为
x
传递给函数?亲爱的本,谢谢,这是一个很难回答的问题:(非常感谢你的帮助,顺便问一下,你对二项回归有一些了解吗?我在这里发了一个问题,但有点复杂。。。
x <- as.data.frame(matrix(c(1, 2, 1, 2, 2, 2, 2, 2, 3,
                            2, 3, 1, 1, 3, 2, 1, 1, 3), nrow = 2, byrow = T))
colnames(x) <- paste0('svo', 1:9)
make_count_col(x)
  svo1 svo2 svo3 svo4 svo5 svo6 svo7 svo8 svo9 newcolumn
     1    2    1    2    2    2    2    2    3         2
     2    3    1    1    3    2    1    1    3      nope