2015-08-24 5 views
0
dat = data.frame(do.call("rbind", list(c(1.5, 1.5, 1.5, 1.5, 1.5), c(1, 2, 3, 4, 5), 
          c(3, 3, 3, 3, 3), c(1, 2, 2, 3, 4)))) 

dat 
    X1 X2 X3 X4 X5 
1 1.5 1.5 1.5 1.5 1.5 
2 1.0 2.0 3.0 4.0 5.0 
3 3.0 3.0 3.0 3.0 3.0 
4 1.0 2.0 2.0 3.0 4.0 

Здесь я хотел бы удалить строки 1 и 3, потому что элементы в этих рядах одинаковы. Я хочу, чтобы полученный data.frame состоял только из строк 2 и 4. Какой быстрый способ сделать это без написания цикла?Как удалить вектор с повторяющимися элементами из R data.frame?

ответ

0

Вы можете использовать apply + length + unique наряду с регулярным Подменю:

dat[apply(dat, 1, function(x) length(unique(x))) > 1, ] 
# X1 X2 X3 X4 X5 
# 2 1 2 3 4 5 
# 4 1 2 2 3 4 

Вот что было сделано:

  • apply(dat, 1, function(x) length(unique(x))) проходит через data.frame строки и возвращает сколько уникальных значений там находятся в каждой строке.
  • > 1 создает логический вектор, отвечающий, имеет ли строка более одного уникального значения или нет.
  • Мы используем это для подмножества строк, которые мы хотим.
+1

или '!! apply (dat, 1, var)' –

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