如何从R中的特定列逐行获取最频繁的分类值?

时间:2019-10-09 11:28:24

标签: r

我有关于访问类型的时间和日期列之类的数据。

Below is the sample data[1]
 [1]: https://i.stack.imgur.com/GfnQb.png

根据以上数据,我必须逐行获取最大重复值。

I tried like below
out1$MAX1 <- do.call('pmax',c(out1[,2:5],list(na.rm=TRUE)))
Output of above code[2]
[2]: https://i.stack.imgur.com/CitAa.png

它为某些行提供了错误的值。例如,在上面的第三行输出中,我们有“ SFU”,“ SFU”,“ SFU”,“ SFU,GFU”。值必须为“ SFU,GFU”。但必须获得“ SFU”。我还必须添加新列,以重复访问类型的次数(即,对于同一第三行,“ SFU”为最大值)重复4次)。 如何实现?

1 个答案:

答案 0 :(得分:0)

对于最初的问题,您可以通过以下方式逐行获得最频繁的分类值:(1)创建一个将向量表化并返回最频繁的函数;和(2)遍历数据框,取消列出每一行并调用函数:

# Create sample data
df <- data.frame(
  id = 1:5,
  v1 = sample(c("SFU", "GFU"), replace = TRUE, 5),
  v2 = sample(c("SFU", "GFU"), replace = TRUE, 5),
  v3 = sample(c("SFU", "GFU"), replace = TRUE, 5),
  v4 = sample(c("SFU", "GFU"), replace = TRUE, 5),
  stringsAsFactors = FALSE
)

# Create function
get_most_frequent <- function(x) {
  tab <- sort(table(x))
  out <-  names(tail(tab, 1))
  out
}

# Loop through data frame
df$most_frequent <- vector(mode = "character", length = nrow(df))
for (i in 1:nrow(df)) {
  r <- unlist(df[i,2:5])
  df$most_frequent[i] <- get_most_frequent(r)
}

如果您需要拆分“ SFU,GFU”之类的实例,则可以相应地调整功能以按逗号拆分字符串。