확장 가능한 행이있는 R에서 테이블을 만드는 방법

검색 및 정렬 기능이있는 대화 형 테이블은 데이터를 탐색하는 좋은 방법입니다. 때로는 R로 더 많은 작업을 수행하는 비디오 자습서 목록과 같은 텍스트 전용 데이터를 포함하여 해당 데이터를 다른 사람들과 공유하고 싶을 수도 있습니다.

그러나 해당 데이터에 상당히 긴 항목이있는 열이 포함 된 경우 해당 열은 화면 너비의 테이블에 잘 맞지 않을 수 있습니다. 모든 행에 매우 넓은 열이 포함되어 있지 않은 경우 특히 까다로울 수 있습니다. 예를 들어, 한 필드가 "추가 의견이 있습니까?"인 설문지 결과 테이블이 있습니다. 모든 사람이 그럴 수있는 것은 아닙니다.

확장 가능한 행이있는 테이블이 유용 할 수 있습니다. 올해 초 NICAR 데이터 저널리즘 컨퍼런스에서 연사 (및 다른 참석자들)가 세션 프레젠테이션 링크를 제출할 수 있도록 양식을 게시했습니다. 어떤 사람들은 추가 의견을 추가했습니다. 다른 사람들은하지 않았습니다. 기본적으로 해당 열을 표시하면 화면 공간이 많이 낭비됩니다.

대신 사용자가 행 확장 아이콘을 클릭하는 경우에만 해당 주석 필드가 NICAR 리소스의 대화 형 테이블에 표시됩니다. 아래 스크린 샷에서 볼 수 있듯이 모든 행이 해당 필드에 데이터가있는 것은 아니기 때문에 주제 이름 왼쪽에있는 클릭 가능한 아이콘으로 모든 행을 확장 할 수있는 것은 아닙니다.

Sharon Machlis,

이렇게 테이블을 만드는 방법을 봅시다. 

따라하려면 반응 형 패키지를 설치하고로드하십시오. 이 데모에서는 rio, glue, htmltools 및 dplyr 패키지도 설치해야합니다.

아래 링크에서이 데모에서 사용할 데이터를 다운로드 할 수 있습니다. 올해 NICAR 컨퍼런스에서 R Python 세션에 대한 작은 (15 행) 데이터 세트 입니다.

2020 년 NICAR 데이터 저널리즘 컨퍼런스 Sharon Machlis에서 R 및 Python 세션에 대한 15 행의 정보 확장 가능한 행이있는 테이블 용 R 데모 데이터 세트 다운로드

R에서 반응 가능 및 dplyr로드

아래 코드에서 reactable 및 dplyr을로드 한 다음 rio::import()

도서관 (반응 가능)

도서관 (dplyr)

nicar <-rio :: import ( "nicar.csv")

데이터에는 리소스 이름 (What), 작성자 (Who), TheURL, 태그, 유형 및 설명에 대한 열이 있습니다.

다음으로 각 리소스에 대한 클릭 가능한 링크가있는 리소스라는 새 열을 만듭니다. 사용자가 테이블에 표시된 리소스에 쉽게 접근 할 수 있도록 What 및 TheURL 열을 사용하여 약간의 기본 HTML을 작성하고 있습니다.

그런 다음 원하는 순서대로 원하는 열을 선택합니다.

니카 %

mutate (

리소스 = glue :: glue ( "{What}")

) %> %

select (Resource, Who, Tags, Type, Comments)

기본 반응 형 테이블로 시작 

마지막으로 기본 반응 형 테이블을 만듭니다.

반응 가능 (니카)

그리고이 테이블은 기본입니다. 아직 검색 창이 없으며 리소스 열에 HTML 로 표시 되는 대신 실제 HTML 코드 가 표시 됩니다

Sharon Machlis,

다음 코드 그룹에서는 테이블에 검색 상자를 추가하고 열을 정렬 할 수 있음을 나타내는 작은 화살표 아이콘을 추가합니다.

반응 가능 (nicar, 검색 가능 = TRUE, showSortable = TRUE, showSortIcon = TRUE)

reactable에게 Resource 열을 HTML로 표시하도록 지시하기 위해 column 인수와 colDef가 하나 이상의 열 속성을 설정하는 목록을 사용합니다. 아래에서는 html = true리소스 열을 설정 하여 HTML로 표시하고 해당 열의 크기를 조정할 수도 있습니다.

reactable (nicar, 검색 가능 = TRUE, showSortable = TRUE, showSortIcon = TRUE,

열 = 목록 (

리소스 = colDef (html = TRUE, 크기 조정 가능 = TRUE)

)

)

reactable에게 메인 테이블에 Comments 열을 표시하지 않도록 지시하기 위해 colDef(show = FALSE).

reactable (nicar, 검색 가능 = TRUE, showSortable = TRUE, showSortIcon = TRUE,

열 = 목록 (

리소스 = colDef (html = TRUE, 크기 조정 가능 = TRUE),

주석 = colDef (show = FALSE)

)

)

여태까지는 그런대로 잘됐다.

Sharon Machlis,

확장 가능한 행에 반응 가능한 코드 추가

다음 단계는 확장 가능한 행을 추가하는 것이며 이는 좀 더 복잡합니다.

# reactable의 제작자 Greg Lin에 따라 필요한 기능

html <-function (x, inline = FALSE) {

컨테이너 <-if (인라인) htmltools :: span else htmltools :: div

컨테이너 (dangerouslySetInnerHTML = list ( "__ html"= x))

}

반응 가능 (nicar, 검색 가능 = TRUE, showSortable = TRUE,

열 = 목록 (

리소스 = colDef (html = TRUE, 크기 조정 가능 = TRUE),

주석 = colDef (show = FALSE)

),

# 주석이 있으면 행을 확장 가능하게 만듭니다.

세부 사항 = function (index) {

if (nicar $ Comments [index]! = "") {

htmltools :: tagList (

html (nicar $ Comments [index])

)

}

}

)

이 부분을 직접 작성하지 않았습니다. 반응 형 제작자 Greg Lin이 썼습니다. 솔직히, 나는 모든 라인이 무엇을하고 있는지 이해하지 못합니다. 하지만 작동합니다! 

샤론 마클리스

다음에 확장 가능한 행이있는 테이블을 만들고 싶을 때이 코드를 기억합니까? 아뇨. 내가 만들하지만 RStudio의 코드를 , 나는하지 않습니다 그것을 기억. 항상 몇 번의 키 입력 만 있으면됩니다.

RStudio 코드 스 니펫에 전혀 익숙하지 않은 경우 코드 스 니펫에 대한 R으로 더 많은 작업 수행 에피소드에서 전체 설명을 확인 하세요. 그러나 여기에 기본이 있습니다.  

RStudio 코드 조각 만들기

아래는 내 데이터 프레임 및 열 이름에 대한 변수를 강조 표시하고 열 정의를 달러 기호 표기법에서 대괄호 표기법으로 변경하는 테이블 코드 이미지입니다 (스 니펫에서 훨씬 더 잘 작동 함). 또한-매우 중요합니다. 스 니펫 제목을 추가하고 시작 탭으로 모든 코드 줄을 들여 쓰었습니다. 그것은 필수입니다!

Sharon Machlis,

그런 다음 각 변수 이름을 일반 스 니펫 변수 로 변경 하면됩니다. 데이터 프레임에 대해 1, HTML로 표시하려는 열에 대해 2, 확장 가능한 행 열에 대해 3입니다. 변수 구문에 유의하십시오 ${number:variable_name}.. 이러한 변수를 사용하면 RStudio에서 실제 변수 이름을 쉽게 채울 수 있습니다. 

my_expandable_row 스 니펫

html <-function (x, inline = FALSE) {

컨테이너 <-if (인라인) htmltools :: span else htmltools :: div

컨테이너 (dangerouslySetInnerHTML = list ( "__ html"= x))

}

reactable ($ {1 : mydf}, 검색 가능 = TRUE, showSortable = TRUE,

열 = 목록 (

$ {2 : html_column} = colDef (html = TRUE, 크기 조정 가능 = TRUE),

$ {3 : expand_col} = colDef (show = FALSE)

),

세부 사항 = function (index) {

if ($ {1 : mydf} [[ '$ {3 : expand_col}']] [index]! = "") {

htmltools :: tagList (

html ($ {1 : mydf} [[ '$ {3 : expand_col}']] [색인])

)

}

}

)

위의 스 니펫 코드를 복사하여 자신의 RStudio 스 니펫 파일에 붙여 넣을 수 있습니다.

usethis :: edit_rstudio_snippets ()

RStudio에서 스 니펫 파일을 엽니 다. 스 니펫 코드 따옴표가 일반 따옴표이고 각 행이 탭으로 들여 쓰기되었는지 확인하십시오 (공백뿐만 아니라 각 코드 행의 시작 탭은 필수 임).

이제 RStudio 소스 R 스크립트 파일에 코드 조각의 이름을 입력하면 코드가 표시되도록 확장되어야합니다. 그런 다음 첫 번째 변수의 이름을 입력하고 탭을 누르고 두 번째 변수의 이름을 입력하는 등의 작업을 수행 할 수 있습니다. 어떻게 작동하는지 알아 보려면이 기사에 포함 된 비디오를 확인하십시오. 그리고 확장 가능한 행으로 나만의 대화 형 테이블을 즐기세요!

더 많은 R 팁을 보려면 R으로 더 많은 작업 수행 페이지로 이동하세요.