【发布时间】:2021-12-07 23:51:51
【问题描述】:
我有一个大数据库,我想有条件地处理重复(不删除任何一个)到另一列。 下面是我的输入示例:
name nb_participants
INSTITUT BILA BILA 10
INSTITUT BILA BILA 4
INSTITUT BILA BILA NA
INSTITUT NZUNDU 3
INSTITUT NZUNDU 15
...
structure(list(name = c("INSTITUT BILA BILA", "INSTITUT BILA BILA", "INSTITUT BILA BILA","INSTITUT NZUNDU","INSTITUT NZUNDU"), nb_participants = c(10, 4, NA,3,15)), row.names = c("1", "2","3","4","5"), class = "data.frame")
想要的输出如下:
name nb_participants
INSTITUT BILA BILA 2-1 10
INSTITUT BILA BILA 2-2 4
INSTITUT BILA BILA 2-3 NA
INSTITUT NZUNDU 2-2 3
INSTITUT NZUNDU 2-1 15
...
structure(list(name = c("INSTITUT BILA BILA 2-1", "INSTITUT BILA BILA 2-2", "INSTITUT BILA BILA 2-3","INSTITUT NZUNDU 2-2","INSTITUT NZUNDU 2-1"), nb_participants = c(10, 4, NA,3,15)), row.names = c("1", "2","3","4","5"), class = "data.frame")
我有这个命令
data$name<-ave(as.character(data$name), data$name, FUN=function(x) if (length(x)>1) paste0(x[1], '-', seq_along(x), '') else x[1])
但我不知道如何处理有条件地对另一列进行排名。目前我唯一能做的就是:
data<-data %>%
group_by(name) %>%
filter(nb_participants ==max(nb_participants))
您有什么想法可以帮上忙吗?非常感谢。
【问题讨论】:
-
后缀的
"2-"是什么意思? -
另外请提供输入数据的可重现示例
-
你尝试了什么?排名数字是否必须添加到第 1 列的字符串中,还是可以是不同的列? (子问题:您确定需要将 NA 值保留在第 2 列中吗? - 如果是这样,它会使排名更加复杂)
-
-2 表示重复。另外,我刚刚添加了一个可复制的示例。对于 NA 值,我想保留尽可能多的信息。但是,如果它使排名变得困难,那么分析就不是必需的,所以我想我可以不这样做。
-
执行此操作的标准方法是使用
make.unique,但是尽管这样做是为了达到目的,但即使使用自定义sep,它看起来也不会与您建议的相同。这个函数对你来说够用还是你更愿意创建一个自定义函数?
标签: r duplicates