'append = TRUE'에 해당되는 글 1건

  1. 2016.07.02 [R] 폴더 내 여러개 파일들을 Loop 돌려서 자동으로 불러오기 (43)

폴더에 자잘하게 쪼개진 여러개의 파일들이 있을 때, 그리고 이 파일들을 일일이 R로 불러오기 해야 할 때, 더그리고 이들 불러온 파일을 한개의 데이터셋을 합쳐야 할 때 (이쪽 동네 전문용어로) 노가다를 하지 않고 좀더 스마트하게 하는 방법을 소개하겠습니다.

 

순서는 다음과 같습니다.

  • (1) 폴더 경로 객체로 만들기
  • (2) 폴더 내 파일들 이름을 list-up 하여 객체로 만들기
  • (3) 파일 개수 객체로 만들기
  • (4) 폴더 내 파일들을 LOOP 돌려서 불러오기 : read.table()
  • (5) 파일을 내보내면서 합치기 : write.table(dataset, APPEND = TRUE)
  • (6) 데이터프레임으로 불러오기, 칼럼 이름 넣기 : read.table(dataset_all, col.names = c())

 

자, 예를 들면서 순서대로 R script 설명하겠습니다.

 

 

아래의 화면캡쳐 예시처럼 MyDocuments > R > FILES 폴더 아래에 daily로 쪼개진 10개의 text 파일들이 들어있다고 해봅시다.  (10개 정도야 일일이 불어올 수도 있겠지만, 100개, 1,000개 파일이 들어있다면?)

 

 

 

 

  • (1) 폴더 경로 객체로 만들기

> # cleaning up environment > rm(list=ls()) >

> # making directory as an object > src_dir <- c("C:/Users/Owner/Documents/R/FILES") # 경로 구분 : '\'를 '/'로 바꿔야 함 >
>
src_dir [1] "C:/Users/Owner/Documents/R/FILES" 

 

 

  • (2) 폴더 내 파일들 이름을 list-up 하여 객체로 만들기 : list.files()

> # listing up name of files in the directory => object
>

>
src_file <- list.files(src_dir) # list
>
> src_file [1] "day_20160701.txt" "day_20160702.txt" "day_20160703.txt" "day_20160704.txt" [5] "day_20160705.txt" "day_20160706.txt" "day_20160707.txt" "day_20160708.txt" [9] "day_20160709.txt" "day_20160710.txt"

 

 

 

"C:/Users/Owner/Documents/R/FILES" 디렉토리에 들어있는 파일들을 열어보면 아래와 같은 데이터들이 들어있습니다. (가상으로 만들어 본 것임)  daily로 집계한 데이터들이 들어있네요.

 

 

  • (3) 파일 개수 객체로 만들기 : length(list)

 

> # counting number of files in the directory => object
> 
> src_file_cnt <- length(src_file) >
> src_file_cnt [1] 10

 

 

 

여기까지 R을 실행하면 아래와 같이 environment 창에 객체들이 생겼음을 확인할 수 있습니다.

 

 


 

  • (4) 폴더 내 파일들을 LOOP 돌려서 불러오기
    => (5) 파일을 내보내면서 합치기 : write.table(dataset, APPEND = TRUE)


    : for(i in 1:src_file_cnt) {read.table()
                                     write.table(dataset, append = TRUE)}

 

> # write.table one by one automatiically, using loop program > for(i in 1:src_file_cnt) { + + # write.table one by one automatiically, using loop program + dataset <- read.table( + paste(src_dir, "/", src_file[i], sep=""), + sep=",", header=F, stringsAsFactors = F) + + # dataset exporting with 'APPEND = TREU' option, filename = dataset_all.txt + write.table(dataset, + paste(src_dir, "/", "dataset_all.txt", sep=""), + sep = ",", + row.names = FALSE, + col.names = FALSE, + quote = FALSE, + append = TRUE) # appending dataset (stacking) + + # delete seperate datasets + rm(dataset) + + # printing loop sequence at console to check loop status + print(i) + } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 [1] 6 [1] 7 [1] 8 [1] 9 [1] 10

 

 

 

여기까지 실행을 하면 아래처럼 MyDocuments>R>FILES 폴더 아래에 'dataset_all.txt' 라는 새로운 텍스트 파일이 하나 생겼음을 확인할 수 있습니다. 

 


 

 

새로 생긴 'dataset_all.txt' 파일을 클릭해서 열어보면 아래와 같이 'day_20160701.txt' ~ 'day_20160710.txt'까지 10개 파일에 흩어져있던 데이터들이 차곡차곡 쌓여서 합쳐져 있음을 확인할 수 있습니다.

 

 

 

 

  • (6) 데이터 프레임으로 불러오기 : read.table()
         칼럼 이름 붙이기 : col.names = c("var1", "var2", ...)

> # reading dataset_all with column names
> dataset_all_df <- read.table(
+   paste(src_dir, "/", "dataset_all.txt", sep=""), 
+   sep = ",", 
+   header = FALSE, # no column name in the dataset
+   col.names = c("ymd", "var1", "var2", "var3", "var4", "var5", 
+                 "var6", "var7", "var8", "var9", "var10"), # input column names
+   stringsAsFactor = FALSE, 
+   na.strings = "NA") # missing value : "NA"

 

 

 

우측 상단의 environment 창에서 'dataset_all_df' 데이터 프레임이 새로 생겼습니다.

클릭해서 열어보면 아래와 같이 'day_20160701.txt' ~ 'day_20160710.txt'까지 데이터셋이 합쳐져있고, "ymd", "var1" ~ "var10" 까지 칼럼 이름도 생겼습니다.

 

 

 

프로그래밍을 통한 자동화가 중요한 이유, 우리의 시간은 소중하니깐요~! ^^

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡'를 꾸욱 눌러주세요.

 

 

====================================================================

(2018.03.14일 내용 추가)

 

댓글 질문에 '폴더에 있는 개별 파일을 하나씩 읽어와서 하나씩 DataFrame 객체로 메모리상에 생성하는 방법에 대한 질문이 있어서 코드 추가해서 올립니다. 위에서 소개한 방법과 전반부는 동일하구요, 마지막에 루프 돌릴 때 assign() 함수로 파일 이름을 할당하는 부분만 조금 다릅니다.

 

 

#=========================================================
# read all files in a folder and make a separate dataframe
#=========================================================

rm(list=ls()) # clear all

 

# (1) directory
src_dir <- c("D:/admin/Documents/R/R_Blog/326_read_all_files")

 

# (2) make a file list of all files in the folder
src_file <- list.files(src_dir)
src_file

 

 

# (3) count the number of files in the directory => object
src_file_cnt <- length(src_file)
src_file_cnt # 5

 

# (4) read files one by one using looping
#     => make a dataframe one by one using assign function
for (i in 1:src_file_cnt){
  assign(paste0("day_", i), 
         read.table(paste0(src_dir, "/", src_file[i]),
                    sep = ",",
                    header = FALSE))
  print(i) # check progress
}

 

rm(src_dir, src_file, src_file_cnt, i) # delete temp objects
ls() # list-up all dataframes

 

 

 

 

Posted by R Friend R_Friend

댓글을 달아 주세요

  1. 안녕안녕 2016.07.02 14:08  댓글주소  수정/삭제  댓글쓰기

    정말 도움되는 내용이예요! 반복문으로 어떻게 하는지 궁금했는데 정리해주셔서 감사합니다^^

  2. kjh 2016.08.26 11:47  댓글주소  수정/삭제  댓글쓰기

    rm(dataset) 은 안써도 문제가 생기는 부분은 아닌지 궁금합니다

    • R Friend R_Friend 2016.08.26 12:33 신고  댓글주소  수정/삭제

      loop 안에서 rm(dataset()이 없어도 loop 돌때마다 덮어쓰기를 하므로 최종 결과물은 동일합니다.

      다만 메모리 관리 차원에서 중간 템프성 파일은 삭제해주는게 좋은데요, loop 언이 되었건 아니면 loop 밖이 되었건 rm(dataset) 을 어딘가에는 실행시켜주는게 좋습니다. 안해도 에러나는건 없지만 메모리 관리 및 예상치못한 객체 충돌방지 습관적으로 템프성 객체(데이터프레임, 행렬, 벡터, 스칼라, 리스트, 함수....)는 그때 그때 삭제해주는게 좋으러 같아요.

  3. hsj 2016.11.21 15:43  댓글주소  수정/삭제  댓글쓰기

    유용한 정보 감사합니다.
    한가지 질문이 있습니다! 불러온 파일 각각 데이터프레임으로 저장하는 방법은 어떻게 해야하나요?

    • R Friend R_Friend 2016.11.21 22:28 신고  댓글주소  수정/삭제

      포스팅 본문 예시에서는 데이터 불러오기 할 때 dataset <- read.table() 이렇게 되어있는데요, dataset 이름을 매번 불러오기할 때마다 서로 다르게 해줘야지 겹치지 않고 서로 다르게 구분이 되겠지요.

      그러려면 dataset 이름에 구분자를 loop 돌려가면서 추가를 해줘야 하는데요, 이때 assign() 함수를 사용해줘야 객체로 인식을 합니다.

      이번 포스팅에 assign() 함수를 곁들여서 살짝 바꿔주면 되는데요, assign() 함수는 아래 포스팅 참고하세요.

      http://rfriend.tistory.com/108

  4. ghs 2018.03.14 16:04  댓글주소  수정/삭제  댓글쓰기

    4번을 실행하고 나서 5번에서 합치지않고 각각 저장하는 방법이......댓글에서 설명하신
    assign 함수를 사용해야 한다고 이해했는데.......
    너무 어렵네요.............
    좀더 쉽게 설명해 주실수 있으신가요?

  5. cnk 2018.09.10 19:16  댓글주소  수정/삭제  댓글쓰기

    좋은 자료 감사합니다.

    10개의 파일을 loop를 통해 assign함수를 이용하여 원하는 정보를 읽어서 Environment에 불러 읽는 작업까지 진행하였습니다. 혹시 읽은 파일들을 output file (csv or txt)형식으로 각각 읽은 10개의 파일을 10개의 output으로 만들고 싶은데 어떤식으로 진행해야 할 지 모르겠습니다.

    도움을 주신다면 감사하겠습니다.

    • R Friend R_Friend 2018.09.11 15:08 신고  댓글주소  수정/삭제

      안녕하세요. cnk님,

      (1) ls(pattern = "data_") 함수를 이용하면 R Environment 상에 있는 객체 중에서 특정 패턴을 가진 객체를 리스트업하여 새로운 객체로 만들어주세요. (자세한 내용은 http://rfriend.tistory.com/350 참조)

      (2) For loop 반복문을 사용해서 write.table() 함수를 이용하여 (1)번에서 찾은 여러개의 데이터프레임을 loop를 돌면서 하나씩 text 파일로 내보내기를 해주면 됩니다. paste() 함수를 사용해서 파일 이름이 계속 바뀌게 해주면 됩니다. (write.table() 함수의 자세한 내용은 http://rfriend.tistory.com/17 참조)

  6. 2018.09.11 15:18  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  7. JHJH 2019.01.02 13:35  댓글주소  수정/삭제  댓글쓰기

    위의 방법처럼 폴더 안의 파일들을 NGS_,i 이름의 CSV로 불러온 뒤 각 NGS_i 파일을 for 루프를 이용해서 grep을 해오려고 하는데 잘되지 않네요 ㅠㅠ

    mutation.txt에는 유전자의 이름이 있고, 이를 collapse로 ^,$를 붙혀 exact matching을 하는 방식입니다.
    일일히 grep을 쓰기 너무 힘들어서 루프로 짜보고 있는데 어렵네요...

    gene <-read.table("C:/JHR/pancchr/mutation.txt", header=T, sep="\t")
    v.gene <-as.vector(t(gene))

    for (i in 1:src_file_lnc){
    assign(paste0("list_",i),
    grep(paste(v.gene,collapse = "$|^"),paste0("NGS_",i)[12]))
    print(i)
    }

    이렇게 했을때 list_1을 불러오면 NA가 되버리네요ㅠ 뭐가 문제일까요?

    assign, paste0도 같이 공부해봐야겠습니다ㅠ

    • R Friend R_Friend 2019.01.02 14:25 신고  댓글주소  수정/삭제

      안녕하세요 JH님. 반갑습니다.
      제가 데이터를 가지고 있지 않아서 아래 코드가 정확하게 작동하는지 확인은 할 수가 없는데요, 우선 원하는 결과물에 대해 설명해주신 내용을 토대로 코드를 일부 수정해보았습니다.

      설명해주신 내용 중에 "폴더 안의 파일들을 NGS_,i 이름의 CSV로 불러온 뒤" 라는 부분에 대한 코드가 없는 것처럼 보여서요, 그 부분을 for loop 문 안에 추가를 하였습니다.

      NGS_i 파일들만 특정 폴더에 모두 들어있다고 가정하였습니다.

      댓글란에 코드를 복사해서 넣으면 들여쓰기가 모두 없어지므로 읽기에 좀 어려운데요, R Studio에 코드 복사해서 사용해보시기 바랍니다.

      # (1) directory
      src_dir <- c("D:/admin/Documents/YourDirectory")

      # (2) make a file list of all files in the folder
      src_file <- list.files(src_dir)
      src_file

      # (3) count the number of files in the directory => object
      src_file_cnt <- length(src_file)
      src_file_cnt

      # (4) read files one by one using looping
      # => make a dataframe one by one using assign function
      for (i in 1:src_file_cnt){
      # read NGS files first and make it as a DataFrame
      assign(paste0("NGS_", i),
      read.table(paste0(src_dir, "/", src_file[i]),
      sep = ",",
      header = FALSE))
      # exact matching by using grep
      assign(paste0("list_", i),
      grep(paste(v.gene, collapse = "S|^"), paste0("NGS_", i)[12]))
      print(i) # check progress
      }

  8. JHJH 2019.01.02 20:47  댓글주소  수정/삭제  댓글쓰기

    오 친절한 답변 너무 감사합니다. 한 번에 루프를 넣는 방법이 있었군요ㅠㅠ

    for (i in 1:src_file_lnc){
    >>>assign(paste0("NGS_",i),
    >>>>>>read.csv(paste0(src_dir, "/", src_file[i]),
    >>>>>>stringsAsFactors = T,
    >>>>>>na.strings = T,
    >>>>>>header = T))
    >>>print(i)
    }

    제가 csv로 불러오고 헤더와 stringasfactor를 필요로 해서 이렇게 넣어봣는데 read.table로 하는 것과는 어떤 차이가 있는지 알 수 있을까요??
    NGS_i 파일의 1번쨰 column을 불러오기 위해서[12]를 넣었는데 결과물인 list_i 의 파일들이 NA로 나오는걸 보니 사용하는 함수를 바꾸어보아야할 것 같습니다 조언 감사합니다!!

  9. Yu 2019.01.11 17:50  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    덕분에 작업에 시간단축이 굉장히 많이 되었습니다.

    그러나, 알려주신 코드로 진행을 하는데 오류가 조금 있어서..

    (5) for문까지 진행을 하면

    Error in type.convert.default(data[[i]], as.is = as.is[i], dec = dec, : invalid multibyte string at '<ed><96><89>?뺤옄移섏쐞<ec>썝<ed>쉶<ed>쉶<ec>쓽濡<9d>'

    위와 같은 에러코드가 발생합니다.

    컴퓨터 상에 txt파일을 열면 한글이 깨지지 않고 잘 보이는데.. 문제가 무엇인지 모르겠습니다.

    답변 가능하시다면 부탁드리도록 하겠습니다.

    좋은 하루보내세요.

    • R Friend R_Friend 2019.01.11 21:00 신고  댓글주소  수정/삭제

      안녕하세요.

      아무래도 encoding 문제 때문에 에러가 발생한 것 같습니다.
      ( 참고: http://rfriend.tistory.com/10 )

      read.table 로
      read.table("filename.csv", sep=",", header=FALSE, stringsAsFactors=FALSE, fileEncoding="UTF-8")

      혹은,

      read.table("filename.csv", sep=",", header=FALSE, stringsAsFactors=FALSE, fileEncoding="CP949")

      를 한번 시도해보시면 좋겠습니다.

  10. Yu 2019.01.14 10:19  댓글주소  수정/삭제  댓글쓰기

    안녕하십니까.
    이전에 문의 드렸던 인코딩 관련해서 한번 더 문의를 드리겠습니다.
    말씀해주신 방법으로 (fileEncoding="UTF-8"도 시도해보았음)

    for(i in 1:src_file_cnt){
    dataset <- read.table(
    paste(src_dir, "/", src_file[i], sep=""),
    sep=",", header=F, stringsAsFactors = F, fileEncoding="CP949")
    write.table(dataset,
    paste(src_dir, "/", "dataset_all.txt", sep=""),
    sep=",",
    row.names = F,
    col.names = F,
    quote = F,
    append)
    }

    위의 코드를 입력해도

    Error in as.logical(test) :
    cannot coerce type 'closure' to vector of type 'logical'
    In addition: Warning messages:
    1: In read.table(paste(src_dir, "/", src_file[i], sep = ""), sep = ",", : invalid input found on input connection 'C:/Users/CNI/Desktop/YMS/?낅Т/20190107_?뚯쓽濡?9?€/?곸엫?꾩썝???됱젙?먯튂?꾩썝???됱젙?먯튂?꾩썝??txt/-Unlicensed-235-?됱젙?먯튂1李?txt'
    2: In read.table(paste(src_dir, "/", src_file[i], sep = ""), sep = ",", : 'C:/Users/CNI/Desktop/YMS/?낅Т/20190107_?뚯쓽濡?9?€/?곸엫?꾩썝???됱젙?먯튂?꾩썝???됱젙?먯튂?꾩썝??txt/-Unlicensed-235-?됱젙?먯튂1李?txt'에서 readTableHeader에 의하여 발견된 완성되지 않은 마지막 라인입니다

    위와 같은 에러가 발생합니다.

    for문으로 텍스트를 불러 통합된 데이터 저장까지를 진행하고싶은데.. 문제가 무엇인지 모르겠습니다.

    그러나 for문을 사용하지 않고 개별로

    a01 <- readLines("filename.txt", encoding="UTF-8")

    위와 같은 코드를 실행할때는 한글이 깨지지 않고 잘 불러와집니다.

    혹시 폴더안에 있는 파일을 모두 readLine으로 불러 하나의 txt파일로 저장하는 for문을 제공해주실 수 있으실까요..

    죄송하지만 부탁드리겠습니다. 좋은하루보내세요.

    • R Friend R_Friend 2019.01.14 12:13 신고  댓글주소  수정/삭제

      안녕하세요 Yu님,

      남겨주신 코드에 보니 append 만 쓰셨고 append = TRUE 라고 명시적으로 TRUE를 안쓰셨는데요, TRUE 포함해서 시도해보실래요?

      아래 코드는 readLines()를 사용하고, blank DataFrame을 하나 만들어놓고 거기에 메모리 상에서 하나씩 파일을 읽어들여 만든 DataFrame Temp를 세로로 쌓은(stack) 후에 => 마지막에 data_all DataFrame을 export 하는 코드 입니다. 한번 시도해보시고 잘 안되면 댓글 남겨주세요.

      src_dir <- c("YourDirectoryHere")
      src_file <- list.files(src_dir)
      src_file_cnt <- length(src_file)

      data_all <- data.frame() # blank df for stacking later

      for (i in 1:src_file_cnt){
      # read text file
      dataset_tmp <- readLines(paste0(src_dir, "/", src_file[i]),
      encoding="UTF-8")

      # stack it to data_all
      data_all <- rbind(data_all, dataset_tmp) # assume that columns are the same

      print(i, " th file is done") # progress check
      }

      # export data_all DataFrame into text file
      write.table(data_all, paste0(src_dir, "/", data_all.txt))

  11. Yu 2019.01.14 13:28  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    우선 빠른 답변 너무나도 감사드립니다.

    첫번째로 append = TRUE 를 포함한 코드에서도 동일한 에러가 발생합니다.
    아마 append = TRUE는 입력을 하였는데 질문을 드릴때 댓글을 작성하다가 지워진 것 같습니다.

    두번째로 제공해주신 코드도 에러가 발생하였습니다.

    src_dir <- c("YourDirectoryHere")
    src_file <- list.files(src_dir)
    src_file_cnt <- length(src_file)

    data_all <- data.frame() # blank df for stacking later

    위 코드 까지는 에러없이 잘 진행이 되었습니다 (참고_ src_file_cnt = 92L 입니다.)

    그러나 for문에 있어서는..

    Error in print.default(i, " th file is done") : invalid 'digits' argument
    In addition: Warning message:
    In print.default(i, " th file is done") : NAs introduced by coercion

    위와 같은 에러코드가 발생하였습니다.

    그 뒤에
    write.table(data_all, paste0(src_dir, "/", data_all.txt))

    위 코드 또한

    Error in paste0(src_dir, "/", data_all.txt) :
    object 'data_all.txt' not found

    위와 같은 에러가 발생하였습니다.

    바쁘실텐데 번거롭게 정말 죄송합니다.

    무엇이 문제인지 전혀 감이 오지 않습니다..ㅠㅠ

    가능하시다면 한번 더 설명을 부탁드리겠습니다.

    참고로 제가 불러오고자 하는 텍스트 파일은 csv나 구분자가 따로 없는 회의록입니다.

    개별 회의록을 모두 불러와 한개의 회의록 데이터를 만들고자 하는 작업입니다.

    답변 부탁드리겠습니다. 늘 감사합니다.

    • R Friend R_Friend 2019.01.14 13:39 신고  댓글주소  수정/삭제

      수정한 코드인데요, 한번 해보실래요?
      rbind()를 쓰려면 칼럼 숫자랑 이름, 데이터 형태가 같아야 하는데요, 회의록이라면 rbind()가 잘 작동할지 불확실하네요.

      src_dir <- c("YourDirectoryHere")
      src_file <- list.files(src_dir)
      src_file_cnt <- length(src_file)

      data_all <- data.frame() # blank df for stacking later

      for (i in 1:src_file_cnt){
      # read text file
      dataset_tmp <- readLines(paste0(src_dir, "/", src_file[i]),
      encoding="UTF-8")

      # stack it to data_all
      data_all <- rbind(data_all, dataset_tmp) # assume that columns are the same

      rm(dataset_tmp) # remove temp df

      print(paste0(i, " th file is done")) # progress check
      }

      # export data_all DataFrame into text file
      write.table(data_all, paste0(src_dir, "/", "data_all.txt"))

  12. 2019.01.14 13:58  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  13. Yu 2019.01.14 14:10  댓글주소  수정/삭제  댓글쓰기

    비밀댓글 확인 가능하신가요?ㅠㅠ

    • R Friend R_Friend 2019.01.14 14:17 신고  댓글주소  수정/삭제

      아래 코드로 실행해보시지요.

      src_dir <- c("YourDirectoryHere")
      src_file <- list.files(src_dir)
      src_file_cnt <- length(src_file)

      for (i in 1:src_file_cnt){
      # read text file
      dataset <- readLines(paste0(src_dir, "/", src_file[i]),
      encoding="UTF-8")
      # export & append
      write.table(dataset,
      paste(src_dir, "/", "dataset_all.txt", sep=""),
      sep=",",
      row.names = F,
      col.names = F,
      quote = F,
      append = TRUE)

      print(paste0(i, " th file is done")) # progress check
      }

  14. Yu 2019.01.14 14:25  댓글주소  수정/삭제  댓글쓰기

    헐대박

    보내주신 코드로 진행하니 개별 파일들이 모두 불러져 하나의 데이터로 통합이 되었습니다.
    정말 너무 감사드립니다.

    ㅠㅠㅠㅠㅠ어떻게 감사의 말씀을 드려야할지 모르겠네요 정말 감사합니다.

    앞으로도 자주 방문하여 많은 공부할 수 있도록 하겠습니다.

    친절한 답변 정말 감사합니다.

  15. 2019.01.22 16:04  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend R_Friend 2019.02.08 12:02 신고  댓글주소  수정/삭제

      안녕하세요.
      아래 코드를 참고해서 실행해보시기 바랍니다.

      #========================================================================
      # Read lots of files and then export it word by word with comma separator
      #========================================================================
      rm(list=ls()) # clear all

      #---------- (0) Prerequisite :
      # I've removed all chinese from the file name due to some error during read.table()


      #----------
      # (1) Read lots of files at the same folder using for loop

      # make a source file list
      src_dir <- c("C:/Users/admin/Downloads/test_office_0123") # set with yours
      src_file <- list.files(src_dir)

      # destination directory
      dst_dir <- c("C:/Users/admin/Downloads") # set with yours
      dst_file_name <- c("sillok_data.txt") # set with yours


      # read many files and export it line by line by looping operation
      for (i in 1:length(src_file)){
      # read a file
      df_tmp <- read.table(paste0(src_dir, "/", src_file[i]),
      sep = ",",
      header = FALSE,
      stringsAsFactors = FALSE)

      name <- strsplit(df_tmp[2,], split = " ")[[1]][2] # name

      for (j in 1:nrow(df_tmp)){
      # split a string by space
      splitted_string <- data.frame(do.call('rbind',
      strsplit(df_tmp[j,],
      split = " ",
      fixed = TRUE)))

      # combining i, j, name, and strings of a line
      df_string <- data.frame(i, j, name, splitted_string)

      # export a file and append it line by line
      write.table(df_string,
      paste0(dst_dir, "/", dst_file_name),
      sep = ",",
      row.names = FALSE,
      col.names = FALSE,
      quote = FALSE,
      append = TRUE)
      }

      print(paste0(i, "/", length(src_file), " is done!")) # to check progress
      }

      rm(df_tmp, df_string, splitted_string, i, j, name) # remove temp file

  16. 2019.08.16 19:37  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  17. R Friend R_Friend 2019.08.16 19:46 신고  댓글주소  수정/삭제  댓글쓰기

    data를 한개씩 불러올때 마다 original data에 merge를 하는 것으로 for loop을 사용햐보세요.

    merge는 한번에 Dataframe 한개씩만 가능해서요, 댓글에 남겨주신 것처럼 여러개의 data를 한꺼번에 merge하려고 하면 에러가 날거예요.

    • 알초보 2019.08.16 20:55  댓글주소  수정/삭제

      댓글 감사합니다ㅠㅠ
      제가 알완전 초보라서요..ㅠㅠ
      혹시 어떻게 코드를 작성하면되질 알수있을까요?
      이 데이터가 1000개인데 오늘 하루종일 엑셀 브이룩으로 찾아도 100개를 못해서요ㅠㅠ

    • R Friend R_Friend 2019.08.16 21:02 신고  댓글주소  수정/삭제

      아래 링크에 R로 엑셀파일 읽어오는 패키지, 코드 참고해보세요.

      https://rfriend.tistory.com/m/313

      나머지 for loop은 블로그 본문 참고하시구요.

  18. 2019.08.17 01:46  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend R_Friend 2019.08.17 09:34 신고  댓글주소  수정/삭제

      merge할때 아래처럼 살짝 바꿔서 해보실래요? left outer join (original data 기준으로 merge) 하려는거지요?

      original_data <- merge(original_data, ReadInMerge, by="Phone", all.x=T)

      merge() 함수는 아래 링크 참조하세요.
      https://rfriend.tistory.com/m/51

    • 알초보 2019.08.17 14:06  댓글주소  수정/삭제

      댓글감사합니다!
      말씀해주신 방향대로 해도
      마지막꺼 하나만 남네요ㅠㅠ
      누적으로 각 csv당 하나씩 한 열로 추가가 불가능한가요,,,

    • R Friend R_Friend 2019.08.19 09:07 신고  댓글주소  수정/삭제

      혹시 dataMerge <- merge(xxxxx) 로 하지 않으셨나요? 병합이 된 결과 객체를 original_data로 바꾸어서 해보세요. original_data에 계속 붙이는 형식으로요.

      original_data <- merge(original_data, ReadInMerge, by="Phone", all.x=T)

  19. 2019.09.03 19:38  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

    • R Friend R_Friend 2019.09.03 21:53 신고  댓글주소  수정/삭제

      안녕하세요.
      지금 문제 상황이 정확하게 어떤 것이지 잘 모르겠습니다.

      R, text parsing, regular expression 등의 키워드를 같이 넣어서 구글링 해보시면 좋겠습니다. readLines() 로 텍스트 읽어서 regular expression 을 목적에 맞게 찾아서 작성하시면 숫자만 선별적으로 골라올 수 있을 거예요.