我有关于访问类型的时间和日期列之类的数据。
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次)。 如何实现?
答案 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”之类的实例,则可以相应地调整功能以按逗号拆分字符串。