변수를 적절한 형식으로 강제 변환하는 것에 관한 이전 게시물을 읽은 후 문제가 unlist()
변수의 객체 클래스를 제거하는 것처럼 보이는 : ing 때문이라는 것을 깨달았습니다 .
myList
다음 구조의 중첩 된 목록 ( )을 고려하십시오.
> str(myList)
List of 2
$ lst1:List of 3
..$ var1: chr [1:4] "A" "B" "C" "D"
..$ var2: num [1:4] 1 2 3 4
..$ var3: Date[1:4], format: "1999-01-01" "2000-01-01" "2001-01-01" "2002-01-01"
$ lst2:List of 3
..$ var1: chr [1:4] "Q" "W" "E" "R"
..$ var2: num [1:4] 11 22 33 44
..$ var3: Date[1:4], format: "1999-01-02" "2000-01-03" "2001-01-04" "2002-01-05"
이는 서로 다른 오브젝트 타입 (포함 character
, numeric
및 Date
최저 레벨에서 참조). 나는 사용하고있다
myNewLst <- lapply(myList, function(x) unlist(x,recursive=FALSE))
result <- do.call("rbind", myNewLst)
결과 매트릭스의 원하는 구조를 얻으려면. 그러나 이것은 다음 character
과 같이 모든 변수 에 대한 강제를 생성합니다 .
> str(result)
chr [1:2, 1:12] "A" "Q" "B" "W" "C" "E" "D" "R" "1" "11" "2" "22" "3" "33" "4" "44" "10592" "10593" "10957" "10959" "11323" "11326" ...
- attr(*, "dimnames")=List of 2
..$ : chr [1:2] "lst1" "lst2"
..$ : chr [1:12] "var11" "var12" "var13" "var14" ...
비슷한 문제에 대한 게시물을 읽은 후 활용하려고 시도했습니다.do.call("c", x)
myNewLst <- lapply(myList, function(x) do.call("c", x))
result <- do.call("rbind", myNewLst)
불행히도 character
첫 번째 시도로 모든 변수가 s가됩니다. 그래서 내 질문은 : 내 하위 수준 변수의 객체 클래스를 잃지 않고 중첩 목록을 어떻게 나열 해제합니까? 원하는 결과를 얻을 수있는 대안이 있습니까?
다음에 대한 재현 가능한 코드 myList
:
myList <- list(
"lst1" = list(
"var1" = c("A","B","C","D"),
"var2" = c(1,2,3,4),
"var3" = c(as.Date('1999/01/01'),as.Date('2000/01/01'),as.Date('2001/01/01'),as.Date('2002/01/01'))
),
"lst2" = list(
"var1" = c("Q","W","E","R"),
"var2" = c(11,22,33,44),
"var3" = c(as.Date('1999/01/02'),as.Date('2000/01/03'),as.Date('2001/01/4'),as.Date('2002/01/05'))
)
)
모든 데이터 프레임을 사용 Reduce()
하거나 do.call()
결합 할 수 있습니다. 아래 코드가 작동합니다.
Reduce(rbind,lapply(myList,data.frame,stringsAsFactors=F))
var1 var2 var3
1 A 1 1999-01-01
2 B 2 2000-01-01
3 C 3 2001-01-01
4 D 4 2002-01-01
5 Q 11 1999-01-02
6 W 22 2000-01-03
7 E 33 2001-01-04
8 R 44 2002-01-05
또한 수업이 유지됩니다.
mapply(class,Reduce(rbind,lapply(myList,data.frame,stringsAsFactors=F)))
var1 var2 var3
"character" "numeric" "Date"
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다