2013-09-12 2 views
2

Я работаю с большим dataframe, который выглядит как этотЧастичные дубликаты в г

   X V1 V2 V3 
1 IOJRE.no.m-1 10 2 0 
2 IOJRE.no.m-2 10 7 0 
3 OHIJR.no.m-4 5 5 1 
4 OHIJR.no.m-6 5 6 1 
5 OHIJR.no.m-3 3 3 1 
6 OHIJR.no.m-1 2 3 1 
7 ABCDE.no.m-1 5 6 0 
8 ABCDE.no.m-5 1 4 0 

> dput(mydata) 
structure(list(X = structure(c(3L, 4L, 7L, 8L, 6L, 5L, 1L, 2L 
), .Label = c("ABCDE.no.m-1", "ABCDE.no.m-5", "IOJRE.no.m-1", 
"IOJRE.no.m-2", "OHIJR.no.m-1", "OHIJR.no.m-3", "OHIJR.no.m-4", 
"OHIJR.no.m-6"), class = "factor"), V1 = c(10, 10, 5, 5, 3, 2, 
5, 1), V2 = c(2, 7, 5, 6, 3, 3, 6, 4), V3 = c(0, 0, 1, 1, 1, 
1, 0, 0)), .Names = c("X", "V1", "V2", "V3"), row.names = c(NA, 
8L), class = "data.frame") 

Первые 5 букв во многих элементах в первом столбце похожи. Я пытаюсь подмножить данные, сохраняя только один из этих похожих элементов, который имеет самое высокое значение V1. (если значение V1 одинаков, не важно, какой из них сохранить для меня).

Я не могу придумать правильную команду, потому что это не duplicated(). Я думал об использовании aggregate(), тогда which.max() Но я действительно не могу создать правильную команду для задания. Вот результат, который я ищу.

   X V1 V2 V3 
1 IOJRE.no.m-1 10 2 0 
2 OHIJR.no.m-4 5 5 1 
3 ABCDE.no.m-1 5 6 0 


> dput(mydata2) 
structure(list(X = structure(c(2L, 3L, 1L), .Label = c("ABCDE.no.m-1", 
"IOJRE.no.m-1", "OHIJR.no.m-4"), class = "factor"), V1 = c(10L, 
5L, 5L), V2 = c(2L, 5L, 6L), V3 = c(0L, 1L, 0L)), .Names = c("X", 
"V1", "V2", "V3"), class = "data.frame", row.names = c(NA, -3L 
)) 

Может ли кто-нибудь помочь мне с этим?

Большое спасибо,

ответ

2

Вот data.table подход (вероятно, не лучший, но это работает и быстро)

library("data.table") 
mydata <- data.table(mydata) 
mydata[,X:=strtrim(X,5)] 
setkey(mydata,X,V1) 
mydata[unique(X),mult="last"] 

     X V1 V2 V3 
1: ABCDE 5 6 0 
2: IOJRE 10 7 0 
3: OHIJR 5 6 1 
+0

Спасибо за ваш ответ. Кажется, что у меня нет этих функций, установленных в моем R еще. Извините, я не мог применить команду, которую вы указали выше. – Error404

+0

install.packages ("data.table"), вот и все – beginneR

+0

А я не знал, что data.table было именем пакета. Я на нем :) спасибо – Error404

2

Возможно, не самый быстрый способ сделать это, но он отвечает на ваши вопрос :)

1) Substring свой 1-й переменной:

substr(x$X,1,5) 

2) Найти максимальное V ALUE для каждой группы подстроки

y <- lapply(split(x, substr(x$X,1,5)), function(x) { 
x[which.max(x$V1),]}) 

3) Создать новую dataframe из результатов:

do.call(rbind, y) 
+0

Привет, Асаят, команда работает нормально, но на этот раз ведется расчет. Но в конечном итоге он работает. Приветствия. – Error404

 Смежные вопросы

  • Нет связанных вопросов^_^