2017-05-11 1 views
2

나는 그들이 만드는 것이 각 편집에 대한 위키 백과의 사용자가 기여 삭제 단어의 인공 dataframe을 만들려고하고 있어요에 문자열 목록을 포함, 최종 결과는 다음과 같아야합니다R은 Dataframe

Example of Dataframe

프레임을 만들기 위해 인공적인 데이터를 만들었지 만 "토큰 추가됨"및 "토큰 삭제됨"변수에 문제가 있습니다.

목록의 목록으로 만들면 요소가 항상 같은 길이가 아니더라도 데이터 프레임에 포함시킬 수 있다고 생각했습니다. 하지만 분명히 사실이 아닙니다. 대신 R은 각 개별 토큰에 대한 변수를 만듭니다. 그것은 수백만 개의 변수를 만들 것이기 ​​때문에 실현 불가능합니다.

a <- c(1,2,3) 
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE))) 

DF <- cbind(a,e) 
U <- data.frame(a,e) 

내가이처럼하고 싶은 : 여기에 예시하는 몇 가지 코드

Example of desired Frame

전혀 dataframes와 R이 가능 (나는 이미 답을 dearching 시도하지만, 다른 질문에 대한 것이거나 나를 위해 너무 기술적 이었습니까?) 어떤 도움을 많이 주시면 감사하겠습니다!

+0

나는 이것이 당신이 원하는 의미에서 가능하다고 생각하지 않습니다. 'Data.frame'은 같은 길이의 벡터리스트입니다. 당신이해야하거나하고 싶은 일은리스트의 벡터를 만드는 것입니다. 지금까지 내가 알 수있는 한 이것이 불가능합니다 (http://stackoverflow.com/questions/2624791/how-to-create-a-vector-of-lists-in-r 참조) –

+0

다른 옵션은 각 요소는 문자가 되겠지만 목록을 붙여 넣은 버전은 –

답변

0

모두에게 감사드립니다. 나는 더 간단한 해결책을 찾았다 고 생각한다. 경우 다른 사람이 미래에 비슷한 문제를 가지고 그냥,이 내가 무슨 짓을 :

a <- c(1,2,3) 
b <- c("a","b") 
c <- c(1L,3L,5L,4L) 
d <- c(TRUE,FALSE,TRUE) 
e <- list(b,c,d);e 

DF <- data.frame(a,I(e));DF 

의 I() inhibit function 분명히 변환되는 목록을 방지하고 열까지 단지리스트의 목록처럼 동작 내가 지금까지 말할 수있는 한. 그러나 e 열의 클래스는 "목록"이 아니라 "AsIs"입니다. 이 문제로 인해 문제가 더 심해질 지 모르겠습니다. 그렇다면이 답변을 업데이트 할 것입니다.

편집

은 그래서 일부 기능은 입력으로 ASIS 클래스를하지 않는 것으로 나타났다.유용한 문자열로 다시 변환하려면 모든 행에서 unlist()를 사용하면됩니다.

0

이 시도 :

cbind(a,lapply(e,function(x) paste(unlist(x),collapse=","))) 
0

난 당신이 목록의 벡터를 (당신이 당신의 질문에 제안으로) 사용 가능 원하는 것을 생각하지 않습니다. 이것은 주로 R에 벡터 목록을 만들 수 없기 때문입니다 (How to create a vector of lists in R? 참조)

그러나 한 가지 옵션 (실제로는 data.frame을 원할 경우)은 모든 것을 문자에 강요합니다 (가장 유연한 유형의 아르 자형). 이 같은 것이 사용자에게 유용 할 수 있습니다.

e <- c(paste0(c("a","b"),collapse=","), paste0(c(1L,3L,5L,4L), collapse = ","), paste0(c(TRUE,FALSE,TRUE), collapse = ",")) 
U <- data.frame(a,e, stringAsFactors = F) 

U 
# a    e 
#1 1    a,b 
#2 2   1,3,5,4 
#3 3 TRUE,FALSE,TRUE 

그런 다음 분할로 각 셀의 값을 취소 할 수 있습니다. 뭔가 같은 :

strsplit(U$e, ",") 
1

당신은 정확하게 당신이 사용하고자하는 경우에 당신이 원하는 것을 할 수 library(tibble) :

library(tibble) 

a <- c(1,2,3) 
e <- list(b = as.list(c("a","b")),c = as.list(c(1L,3L,5L,4L)),d = as.list(c(TRUE,FALSE,TRUE))) 

tibble(a,e) 
# A tibble: 3 × 2 
     a   e 
    <dbl>  <list> 
1  1 <list [2]> 
2  2 <list [4]> 
3  3 <list [3]> 

tibble 또는 tbl_df 당신이 전통적인 data.frame로에 사용되는 것처럼 행동하지만, 수 열에 다양한 길이의 목록을 저장하는 것과 같은 멋진 기능이 있습니다.

+0

입니다. 제안 해 주셔서 감사합니다! 예제에서 시도해 보면 단지 다음과 같은 오류가 발생합니다 : 오류 : 변수의 길이는 1 또는 9 여야합니다. 문제 변수 : 'a '' –