2016-06-25 2 views
0

У меня есть большой фрейм данных. Я хочу создать подмножество, основанное на условии значений одного столбца. Скажи:Подмножество фрейма данных на основе состояния одного столбца

a<-data.frame(x=rep(1:5,5),y=rnorm(25),z=runif(25))

Я хочу сделать подмножество на основе значений столбца x. Например, принимая значения x=c(2,3,5) и создайте еще один фрейм данных.

ответ

3

Мы можем использовать %in%

a1 <- a[a$x %in% x,] 

Для Подменю только столбец «х»

a1 <- a[a$x %in% x, "x", drop=FALSE] 

Если нужно подмножество столбец «х», чтобы создать vector на основе x вектора

v1 <- a$x[a$x %in% x] 
+0

Создать другой вектор? Скажем, x = c (2,3,5) – G1124E

+0

@ G1124E Я понимаю вопрос как подмножество 'a' на основе значений в векторе 'x' – akrun

+0

да. Я хочу иметь другой df, основанный на значениях в столбце x. Например, в приведенном выше примере df 'a' принимают только значения столбца x, равного 2,3 и 5. – G1124E

2

Или вы можете использовать subset:

filter <- c(2,5) 
subset(a, x %in% filter) 

Или что то же самое:

subset(a, match(x, filter, nomatch = 0)>0) 

Или

a[match(a$x, filter, nomatch = 0)>0,] 

    # x   y   z 
# 2 2 0.76230930 0.9704342 
# 5 5 -1.61846247 0.5786633 
# 7 2 0.94024182 0.2805524 
# 10 5 -0.08851427 0.6426568 
# 12 2 0.78745436 0.1129637 
# 15 5 -2.41274754 0.4826690 
# 17 2 -0.37616238 0.9518877 
# 20 5 1.18745381 0.8110062 
# 22 2 0.03233245 0.4599623 
# 25 5 -2.28360189 0.4836900 
1

Мы можем использовать функцию согласования значения %in% и filter глагол в dplyr пакет (большой пакет для манипулирования данными).

library(dplyr) 
a1 <- data.frame(x = rep(1:5,5), y=rnorm(25), z=runif(25)) 
a2 <- filter(a1, x %in% c(2,3,5)) 

> a2 
    x   y   z 
1 2 0.28184946 0.3564756 
2 3 0.05634123 0.9826746 
3 5 -0.58611510 0.8119334 
4 2 0.45211282 0.6267487 
5 3 -0.64741961 0.7600619 
6 5 -0.28781978 0.3216957 
7 2 0.51440342 0.5165707 
8 3 1.41958340 0.2328647 
9 5 -0.27751501 0.5400576 
10 2 -0.74835287 0.7976089 
11 3 2.42364991 0.4141980 
12 5 0.22175161 0.1051387 
13 2 1.54876157 0.6408956 
14 3 0.54940989 0.3968186 
15 5 -1.16333440 0.9359615