Функция "which" внутри пользовательской функции, чтобы найти номер столбца на основе некоторого условия - PullRequest
0 голосов
/ 11 февраля 2019

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

У меня есть 2 набора данных test 1 и test2, я готовлю функцию для поиска имени столбца из test1 вдругой набор данных, тест 2 (номер столбца).

dput (test1)

structure(list(mastercode_02 = c(3036696L, 3036696L, 3036696L, 
3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
    mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x07fb2498>)

вторые данные

Консоль ~ /

dput (test2)

structure(list(QID_121 = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), QID_131 = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), unitlevel = c(6, 6, 6, 6, 6, 6), mastercode_01 = c(NA, NA, 
NA, NA, NA, NA), mastercode_02 = c(3036696L, 3036696L, 3036696L, 
3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
    mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
    ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
    NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x07fb2498>)

Я хочу что-то подобное ниже, которое можно использовать в других функциях:

levelfun<-function(m,dataset){

levelname<-names(mastercodes)[[m]]

level_filter_data<-dataset%>% filter(unitlevel>m)

k=which(names(level_filter_data)==levelname)}

здесь я получаю ошибку споследняя строка, может быть, я должен использовать альтернативу какой функции.

1 Ответ

0 голосов
/ 11 февраля 2019

Ваша цель немного неясна, но на вашем примере для создания фреймов данных test1 и test2:

test1<-structure(list(mastercode_02 = c(3036696L, 3036696L, 3036696L, 
                                 3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
                                                                                  3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
                                                                                                                                             3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
                                                                                                                                                                                                                  3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
                                                                                                                                                                                                                                                                                       1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
               mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
                                 NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
                                                                                           NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                 ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                      NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
                                                                                                                NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                                      ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                                           NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
                                                                                                                              "data.frame"), row.names = c(NA, -6L))

test2<-structure(list(QID_121 = c(NA_integer_, NA_integer_, NA_integer_, 
                              NA_integer_, NA_integer_, NA_integer_), QID_131 = c(NA_integer_, 
                                                                                  NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                              ), unitlevel = c(6, 6, 6, 6, 6, 6), mastercode_01 = c(NA, NA, 
                                                                                    NA, NA, NA, NA), mastercode_02 = c(3036696L, 3036696L, 3036696L, 
                                                                                                                       3036696L, 3036696L, 3036696L), mastercode_03 = c(3039617L, 3039617L, 
                                                                                                                                                                        3039617L, 3039617L, 3039617L, 3039617L), mastercode_04 = c(3000470L, 
                                                                                                                                                                                                                                   3000470L, 3000470L, 3000470L, 3000470L, 3000470L), mastercode_05 = c(3039123L, 
                                                                                                                                                                                                                                                                                                        3039123L, 3039123L, 3039123L, 3039123L, 3039123L), mastercode_06 = c(1000054L, 
                                                                                                                                                                                                                                                                                                                                                                             1000054L, 1000054L, 1000054L, 1000054L, 1000054L), mastercode_07 = 1000001:1000006, 
                  mastercode_08 = c(NA_integer_, NA_integer_, NA_integer_, 
                                    NA_integer_, NA_integer_, NA_integer_), mastercode_09 = c(NA_integer_, 
                                                                                              NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                    ), mastercode_10 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                         NA_integer_, NA_integer_, NA_integer_), mastercode_11 = c(NA_integer_, 
                                                                                                                   NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
                                                         ), mastercode_12 = c(NA_integer_, NA_integer_, NA_integer_, 
                                                                              NA_integer_, NA_integer_, NA_integer_)), class = c("data.table", 
                                                                                                                                 "data.frame"), row.names = c(NA, -6L))

В следующих вызовах будет соответственно сказано: какие имена столбцов test2 существуют в test1 Номер индекса вектораиз которых имена столбцов test2 существуют в test1 Подмножество фрейма данных test2, имена столбцов которого существуют в test1

names(test2) %in% names(test1)
which(names(test2) %in% names(test1))
test2[,names(test2) %in% names(test1)]
...