Простая команда для извлечения имен столбцов в sparklyr (R+spark)

В базе r легко извлечь имена столбцов (переменных) из фрейма данных

> testdf <- data.frame(a1 = rnorm(1e5), a2 = rnorm(1e5), a3 = rnorm(1e5), a4 = rnorm(1e5), a5 = rnorm(1e5), a6 = rnorm(1e5))  
> names(testdf)  
[1] "a1" "a2" "a3" "a4" "a5" "a6"

но при использовании sparklyr все становится сложнее. После копирования фрейма данных на искру,

> testdf_tbl <- copy_to(sc, testdf, overwrite = TRUE)  
> names(testdf_tbl)  
[1] "src" "ops"

имена переменных на самом деле находятся глубоко внутри "ops"

> testdf_tbl$ops$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"

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

> testdf_tbl <- testdf_tbl %>% select(-a1)  
> testdf_tbl$ops$vars  
NULL  
> testdf_tbl$ops$x$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"  

другие операции добавляют еще $x к пути.. и так далее.

> testdf_tbl <- testdf_tbl %>% select(-a2)  
> testdf_tbl$ops$x$vars  
NULL  
> testdf_tbl$ops$x$x$vars  
[1] "a1" "a2" "a3" "a4" "a5" "a6"  

Что еще хуже, список переменных не отражает операции выбора, которые мы сделали, они по-прежнему перечисляют a1, a2 в качестве имен столбцов. в то время как,

> head(testdf_tbl)  
Source:   query [?? x 4]  
Database: spark connection master=local[24] app=sparklyr local=TRUE  
        a3           a4          a5         a6  
        dbl          dbl         dbl        dbl  
1 -1.146368875  1.691698406  0.43231629  1.3349111  
2  0.664928710 -1.332242020  0.05380729  1.0139253  
3  1.158095695 -0.097098980 -0.61885204  0.1504693  
4  0.001595841 -0.003765908  0.27935192 -0.3039085  
5 -0.133446040  0.269329076  1.57210274  1.7762602  
6  0.006468698 -1.300439537  0.74057307  0.1320428  

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

ОБЯЗАТЕЛЬНО, есть простой, простой способ извлечь текущие имена переменных / столбцов в sparklyr, а-ля names() в базе р.

1 ответ

Решение

Как сказал Кевин, tbl_vars работает, но если вы хотите, чтобы он был более "base-R", colnames и делает это.

Другие вопросы по тегам