如果我们有玩家A,B,C,D,E,F,并且数据框D的条目中每行的条目等于玩家标签并且有多行。
我想找到一个索引,在该索引处显示D中唯一的团队数量,显然是由length(unique(D$names))
给出的。
例如,我们可能有前6行有名称:A,B,C,D,E,F在这种情况下索引= 6.但我们可能有另一种情况,其中A,B,C,D ,A,E,F,在这种情况下索引= 7。我已经完成了以下 clunky 代码:
for(i in 6:60){
if (length(unique(D$Team[1:i]))==length(unique(D$Team)))
{
print(i)
break
}
}
*我从6开始,因为这是所需的最小行数
我认为使用R.中的匹配函数有更好的解决方案,例如"
match(length(unique(D$Team)[i]),length(unique(D$Team)))
答案 0 :(得分:2)
我们可以使用seq_along()
来获取向量的非重复元素的索引,并通过将整个事物包装在max()
中来获得最后一个元素的索引。
# Example vector based on your question
vec <- c("A","B","C","D","A","E","F")
# Get index of last non-duplicate element
max(seq_along(vec)[!duplicated(vec)])
#[1] 7
答案 1 :(得分:2)
由于match
给出了向量中第一个元素的出现,你可以找到每个唯一元素的第一个匹配的位置,然后取最大值:
max(match(unique(D$Team),D$Team))
举个例子:
set.seed(1)
D<-data.frame(Team=sample(LETTERS[1:6],100,TRUE),stringsAsFactors=FALSE)
max(match(unique(D$Team),D$Team))
#[1] 13
D$Team[1:13]
#[1] "B" "C" "D" "F" "B" "F" "F" "D" "D" "A" "B" "B" "E"