2017-05-05 1 views
0

나는 목록 변수 X가 있고 X의 요소와 길이에 따라 데이터 세트에 새로운 범주 형 변수를 추가하려고합니다. 예를 들어,목록의 요소를 기반으로 데이터 세트에 새 변수 추가

X  
    [[1]] 
    [[1]]$In 
    [1] 3 4 5 6 

    [[2]] 
    [[2]]$In 
    [1] 7 8 9 

    [[3]] 
    [[3]]$In 
    [1] 11 12 13 
library(stats) 
library(graphics) 
attach(cars) 
cars$c<-NA 

는 지금은 데이터 세트의 행 번호 또는 3,4,5에 동일한 대상 번호를, C는 행에 대해, 1이 될 것이라고 방식으로 범주 형 변수 (c)를 만들고 싶어하는 7,8,9와 같다면 c는 2가 될 것입니다. 데이터 세트의 행 번호가 11,12,13이면 c는 3이 될 것입니다. 어떻게 할 수 있을지 궁금합니다. 내 실제 데이터에서 X의 길이는 약 20 일 수 있기 때문에 루프 함수가 필요합니다. 이는 C가 20 개의 카테고리를 가지며 일부 셀이 NA가 될 것임을 의미합니다. 나는 차에 (R에서 사용할 수 있습니다) 데이터 세트를 C 열을 추가 할 필요가 다음

In c 
3 1 
4 1 
5 1 
6 1 
7 2 
8 2 
9 2 
11 3 
12 3 
13 3 

같은 것을 필요로에서의 값이 수를 행하기 위해 일치하는 경우 우리는 그렇지 C는 것 C의 값을 포함합니다 없음.

답변

0
df <- data.frame("In" = unlist(X), "c" = rep(seq_len(length(X)), sapply(X, lengths))) 

이 구성 요소는 data.frame을 구성합니다. 첫 번째 함수 unlist은 중첩 목록을 자동 벡터로 바꿉니다. 두 번째 요소는 중첩 목록의 요소 위치를 내부 목록 요소 내의 벡터에 포함 된 요소 수만큼 반복합니다.

df 
    In c 
1 3 1 
2 4 1 
3 5 1 
4 7 2 
5 8 2 
6 9 2 
7 11 3 
8 12 3 
9 13 3 

데이터

X <- list(list("In"=3:5), list("In"=7:9), list("In"=11:13)) 
관련 문제