2014-08-27 3 views
0

많은 파일이 있으며 각 파일에 고유 한 ID 코드를 자동으로 부여해야합니다.목록에있는 파일의 각 행에 고유 한 ID를 부여하십시오.

는 지금까지, 나는 다음과 같이 관리해야 : 새 컬럼에 파일의 이름을두고

datalist <- mapply(cbind, datalist, "temp1"=names(datalist), SIMPLIFY=F) 

합니다.

그러나 각 파일의 1 : 행 수에서 추가하고 싶습니다.

두 가지 시도를했지만 실제로 작동하지 않을 것으로 예상됩니다. (나는 함께 붙여넣고 'temp'열을 삭제할 것입니다. 그런 다음 하나에서 수행하는 방법을 알아냅니다. 임시 열이없는 단계) :

datalist <- mapply(cbind, datalist, "temp2"=1:(sapply(datalist, nrow)), SIMPLIFY=F) 

또는

datalist <- mapply(cbind, datalist, "temp2"=1:nrow(datalist), SIMPLIFY=F) 
내가 목록 ( nrow(datalist[[1]]))의 단일 비트의 행의 수를 얻을 수 있지만, 모두에 그것을 적용하는 방법을 확실하지 오전 수

목록에있는 사람들의 수에 관계없이

for 루프입니까, 아니면 더 좋은 방법이 있습니까?

예 데이터 세트 :

datalist <- structure(list(test.raw.data = structure(list(officer.sw = c("bob", 
NA, "brian", "brian", NA), officer.ne = c(NA, "angie", NA, NA, 
NA), officer.nw = c(NA, NA, NA, NA, "lola")), .Names = c("officer.sw", 
"officer.ne", "officer.nw"), class = "data.frame", row.names = c(NA, 
-5L)), test2.raw.data = structure(list(officer.sw = c("bob", 
"NA", "brian", "brian", "NA", "bob", "NA", "bob", "bob", "NA", 
"NA"), officer.ne = c("NA", "angie", "NA", "NA", "NA", "NA", 
"sandy", "NA", "NA", "NA", "NA"), officer.nw = c("NA", "NA", 
"NA", "NA", "lola", "NA", "NA", "NA", "NA", "lola", "NA"), officer.EM = c("NA", 
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "mr bendy" 
), randomothercol = c("angie", "b", "c", "e", "d", "fg", "t", 
"wsefg", "aweg", "lola", "g")), .Names = c("officer.sw", "officer.ne", 
"officer.nw", "officer.EM", "randomothercol"), class = "data.frame", row.names = c(NA, 
-11L))), .Names = c("test.raw.data", "test2.raw.data")) 

답변

1

이 시도 :

makeIndex <- function(x, name, sep="-"){ 
    cbind(index=paste(name, seq_along(x[[1]]), sep=sep), x) 
} 

lapply(seq_along(datalist), function(i)makeIndex(datalist[[i]], names(datalist)[i])) 

결과 :

[[1]] 
      index officer.sw officer.ne officer.nw 
1 test.raw.data-1  bob  <NA>  <NA> 
2 test.raw.data-2  <NA>  angie  <NA> 
3 test.raw.data-3  brian  <NA>  <NA> 
4 test.raw.data-4  brian  <NA>  <NA> 
5 test.raw.data-5  <NA>  <NA>  lola 

[[2]] 
       index officer.sw officer.ne officer.nw officer.EM randomothercol 
1 test2.raw.data-1  bob   NA   NA   NA   angie 
2 test2.raw.data-2   NA  angie   NA   NA    b 
3 test2.raw.data-3  brian   NA   NA   NA    c 
4 test2.raw.data-4  brian   NA   NA   NA    e 
5 test2.raw.data-5   NA   NA  lola   NA    d 
6 test2.raw.data-6  bob   NA   NA   NA    fg 
7 test2.raw.data-7   NA  sandy   NA   NA    t 
8 test2.raw.data-8  bob   NA   NA   NA   wsefg 
9 test2.raw.data-9  bob   NA   NA   NA   aweg 
10 test2.raw.data-10   NA   NA  lola   NA   lola 
11 test2.raw.data-11   NA   NA   NA mr bendy    g 
+0

은 어떻게 든, 이러한 답변,'이름 (DataList에) 모두를 테스트 한 후'NULL' ... 난 아직도 나중에에 대한 목록 요소의 이름을 필요로'지금, 나는 eentirely 모르겠어요 왜를 삭제 중입니까? – Froom2

+0

원래 'datalist'의 이름은이 객체에 새 값을 할당 한 경우에만 변경됩니다. 내 솔루션은 원래 개체를 변경하지 않습니다. 원한다면 내 대답의 결과를 쉽게 바꿀 수 있습니다. 예를 들어'names (...) <- names (datalist)'를 사용합니다. – Andrie

+0

고마워요 :) 예, 집에 돌아간 후 어젯밤에 다시 할당하는 것에 대해 생각했습니다. 도와 줘서 고마워! 이러한 답변 중 어느 것이 똑같은지 알지 못합니다. 둘 다 비슷합니다! – Froom2

1

을 게시물의 하단에 원래 datalist을 시작으로, 당신은 몇 가지를 할 수 lapply 호출 내에서 색인 생성.

> lapply(seq(datalist), function(i) { 
     datalist[[i]][[paste0("temp", i)]] <- 
      paste0(names(datalist)[i], seq(nrow(datalist[[i]]))) 
     datalist[[i]] 
    }) 
# [[1]] 
# officer.sw officer.ne officer.nw   temp1 
# 1  bob  <NA>  <NA> test.raw.data1 
# 2  <NA>  angie  <NA> test.raw.data2 
# ... 
# 
# [[2]] 
# officer.sw officer.ne officer.nw officer.EM randomothercol   temp2 
# 1   bob   NA   NA   NA   angie test2.raw.data1 
# 2   NA  angie   NA   NA    b test2.raw.data2 
# ... 
관련 문제