2017-09-24 59 views
1

這是我的第一篇文章。我剛剛在2周前開始編程,因爲我的研究實驗室需要小組中的技能。我們正在提取的數據不是從軟件分隔的,因此剪切和粘貼最終會得到隨機空間值,需要數小時才能清理。所以我寫了這個代碼,我在Word中清理了數據,然後複製到剪貼板。我將剪貼板內容分配給一個變量。爲什麼我的R函數刪除.csv輸出中的重複值?

因此,舉例來說,如果原始數據是這樣的:

Component          WBC        RBC       Hemoglobin      
Latest Ref Rng & Units       3.90 - 12.70 K/uL    4.60 - 6.20 M/uL    14.0 - 18.0 g/dL    
9/11/2017          7.16        4.71       13.3 (L)      
3/20/2017          5.80        4.31 (L)      12.7 (L)      
2/6/2017           6.10        3.74 (L)      11.3 (L)      
1/30/2017          6.59        4.18 (L)      12.7 (L)      
1/26/2017          7.40        7.40 (L)      12.1 (L)         

我清理在Word中複製到剪貼板如下:

Component          WBC        RBC       Hemoglobin      
9/11/2017          7.16        4.71       13.3      
3/20/2017          5.80        4.31      12.7      
2/6/2017           6.10        3.74      11.3      
1/30/2017          6.59        4.18      12.7      
1/26/2017          7.40        7.40      12.1      

然後我運行下面的函數I創建一次後,我將readClipboard()分配給一個對象:

cbclabs.R <- function (x){ 
      trimcbc <- strsplit(trimws(x), " ") 
      removespace <- c("&", "") 
      unlisted <- unlist(lapply(trimcbc, setdiff, removespace)) 
      cbcmatrix <- matrix(unlisted, ncol = 4, byrow = TRUE) 
      return(write.csv(cbcmatrix, file = "cbc.csv")) 
      } 

但不幸的是, enter image description here

我希望它不要跳過重複值,並創建一個看起來像這樣的輸出: enter image description here

任何意見csv文件跳過在某些時候讓輸出看起來像重複每行的值在此代碼將不勝感激!

+0

請參閱下面的答案。你也可以在'r'中做'Word'清理。如果你願意,我會補充一點。 – Tunn

+0

是的,我將如何做一個單詞清理?我還有其他一些問題,但我會將它們作爲單獨的問題發佈!這太棒了!感謝你的幫助! – MeeraWhy

+0

看起來你所做的只是在每一列中保留第一個數字,所以修改'as.numeric(gsub(「(\\ d * \\。\\ d *)。 「,」\\ 1「,df $ column))'。用你的數據框和列填寫'df $ column'。如果您使用'dplyr',請查看'mutate_all'。 – Tunn

回答

1

可以簡化一下:

原創剪貼板數據

library(tidyverse) # add pipe `%>%` operator 
t(sapply(strsplit(readClipboard(), " "), c)) %>% write.csv("cbc.csv") 

或者只是:

write.csv(t(sapply(strsplit(readClipboard(), " "), c)), "cbc.csv") 

編輯:對於新剪貼板數據

write.csv(t(sapply(strsplit(readClipboard(), "\\s+"), c)), "cbc.csv") 

假設您從左上角的「C」複製到右下角的1。

+0

沒有訣竅:-(返回了一堆空的字段 – MeeraWhy

+0

有人編輯了你發佈的原始數據(可以使用'readClipboard()'工作。你能提供你最初發布的內容,或者我將處理你的內容現在有 – Tunn

+0

cbclabs.R < - function(x){ trimcbc < - strsplit(trimws(x),「」) removedpace <-c(「&」,「」) 未列出< - unlist(lapply(trimcbc ,setdiff,removedpace) cbcmatrix < - matrix(unlisted,ncol = 4,byrow = TRUE) return(write.csv(cbcmatrix,file =「cbc.csv」)) } – MeeraWhy