У меня есть следующий фрейм данных:
mydata=data.frame(class = c("class 1", "class 2", "class 1", "class 2", "class 3",
"class 3", "class 1", "class 2", "class 1", "class 2",
"class 3", "class 1", "class 2", "class 3", "class 3"),
word=c("A","B","A","C","A","B","A","C","D", "F", "G", "A", "U",
"A", "U"), weight=c(0.1,0.2,0.25,0.01,0.19,0.27,0.32,
0.04,0.005,0.111,0.56,0.056,0.08,
0.099,0.2345))
Для каждого класса, т. Е. class 1
, class 2
, class 3
, я бы хотел удалить из mydata
первые три слова (см. столбец word
) с большим весом (см. столбец weight
). Для моего простого примера, код, который реализует эту задачу:
x=table(mydata$class)
class=names(x)
y=mydata[mydata$class==class[1],]
y=y[order(y$weight,decreasing=TRUE),]
y=head(y,3)
z=mydata[mydata$class==class[2],]
z=z[order(z$weight,decreasing=TRUE),]
z=head(z,3)
w=mydata[mydata$class==class[3],]
w=w[order(w$weight,decreasing=TRUE),]
w=head(w,3)
И затем, желаемый результат:
> y$word
[1] A A A
Levels: A B C D F G U
> z$word
[1] B F U
Levels: A B C D F G U
> w$word
[1] G B U
Levels: A B C D F G U
Если бы у меня было больше классов, я бы использовал для l oop сохранение слов в списке. Но ... Есть ли более простой способ получить этот результат?