2014-08-03 4 views
0

Я пытаюсь подмножить dataframe на основе динамического имени.Динамические имена столбцов для подмножества

Моя жёстко версия выглядит следующим образом ...

persona_subset <- subset(newList, subset = (finalList$flag_analoggers =='1')) 

Я хотел бы иметь возможность создать список переменных и итерацию по списку, подставив другое имя столбца каждый раз. Например ...

//Run 1 
persona_subset <- subset(newList, subset = (finalList$flag_1 =='1')) 
//Run 2 
persona_subset <- subset(newList, subset = (finalList$flag_2 =='1')) 
//Run n... 
persona_subset <- subset(newList, subset = (finalList$flag_n =='1')) 

Однако, каждый раз, когда я помещаю переменную в нее, я получаю ошибку «Подмножество должно быть логичным». Я попытался поместить имя переменной в строку, но не получаю правильное подмножество данных.

col_location <- paste("finalList$",toString(x)) 
persona_subset <- subset(newList, subset = (col_location =='1')) 

Как я могу динамически перебирать этот список переменных?

ответ

3

Если бы я был на вашем месте, я бы избегал subset и управлял этой проблемой.

xy <- data.frame(vals1 = runif(9), vals2 = runif(9), a = sample(1:3, 9, replace = TRUE), 
       b = sample(1:3, 9, replace = TRUE), c = sample(1:3, 9, replace = TRUE), 
       d = sample(1:3, 9, replace = TRUE)) 

iterate.vals <- names(xy)[!grepl("vals", names(xy))] 
sapply(iterate.vals, FUN = function(x) { 
    print(xy[xy[, x] == 1, ]) 
    # Run 
}) 

     vals1  vals2 a b c d 
2 0.6165867 0.3728094 1 1 2 1 
3 0.2962395 0.9669952 1 3 1 2 
7 0.5657228 0.7200541 1 3 2 3 
8 0.7793529 0.8391430 1 1 1 1 
     vals1  vals2 a b c d 
1 0.6028678 0.9178560 2 1 1 3 
2 0.6165867 0.3728094 1 1 2 1 
5 0.7234325 0.8426445 2 1 1 1 
6 0.5637070 0.1895586 2 1 2 3 
8 0.7793529 0.8391430 1 1 1 1 
     vals1  vals2 a b c d 
1 0.6028678 0.9178560 2 1 1 3 
3 0.2962395 0.9669952 1 3 1 2 
4 0.9293780 0.3459115 2 2 1 3 
5 0.7234325 0.8426445 2 1 1 1 
8 0.7793529 0.8391430 1 1 1 1 
     vals1  vals2 a b c d 
2 0.6165867 0.3728094 1 1 2 1 
5 0.7234325 0.8426445 2 1 1 1 
8 0.7793529 0.8391430 1 1 1 1 
+0

Гораздо лучше. «bquote» была болью с этим подчеркиванием –

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