2015-12-22 66 views
1

我有兩個問題。基於字符創建新表格

1)我有一個數據集(df),其中最後一列以「09」開頭,每隔一行。像這樣:

a <- c("01+0135.","09-6999","01+0135.","09-6999")  
b <- c("02+2015.", "", "02+2015.", "") 
c <- c("03+0349.","", "03+0349.", "") 
d <- c("04+0537.","","04+0542.","") 
e <- c("05+170.1","","05+170.1","") 
f <- c("06+0.033","","06+0.384","") 
g <- c("07+0.001","","07+0.395","") 
h <- c("08+0.000","","08+0.000","") 
df <- data.frame(a,b,c,d,e,f,g,h) 

> df 

1 01+0135. 02+2015. 03+0349. 04+0537. 05+170.1 06+0.033 07+0.001 08+0.000 
2 09-6999                
3 01+0135. 02+2015. 03+0349. 04+0542. 05+170.1 06+0.384 07+0.395 08+0.000 
4 09-6999 

是否有一種簡單的方法讓每一行(可能使用正則表達式)出現在第九列?

2)如何刪除每列(即06+)的前三個字符以及以01,02,03和04開頭的列的每列末尾的時間段?

+0

嘗試運行該代碼時出現錯誤。 –

+0

已經確認,它應該是data.frame而不是as.data.frame。 – squishy

+0

現在我們需要知道當你將「a」向量中的每個其他項移動到第九列時,「'」'-items會發生什麼,這就是我解釋你的請求的方式。你期望得到的數據幀有2或4行嗎?要在評論中沒有擴展對話框的情況下獲得答案,您應該發佈對您的問題的編輯,並確保預期的輸出結果。 –

回答

1

對於第一個問題,您可以拆分和重組:

df1 <- df[(1:nrow(df))%%2==1,] 
df2 <- df[(1:nrow(df))%%2==0,] 
df1$i <- df2$a 

df1 
#   a  b  c  d  e  f  g  h  i 
# 1 01+0135. 02+2015. 03+0349. 04+0537. 05+170.1 06+0.033 07+0.001 08+0.000 09-6999 
# 3 01+0135. 02+2015. 03+0349. 04+0542. 05+170.1 06+0.384 07+0.395 08+0.000 09-6999 

對於第二個問題,最簡單的方法可能是使用substr()(不過這是假設,你真的只想要個字符4到各7 ,否則我們會想用正則表達式來做一些事情):

for(i in 1:4) df1[,i] <- substr(df1[,i],4,7) 

df1 
#  a b c d  e  f  g  h  i 
# 1 0135 2015 0349 0537 05+170.1 06+0.033 07+0.001 08+0.000 09-6999 
# 3 0135 2015 0349 0542 05+170.1 06+0.384 07+0.395 08+0.000 09-6999 
+0

我設法使用以下命令獲得列「a」: 'a <-regmatches(df1,regexpr(「[0-9] {0,0} 01+ [0-9] {1,4}」),df1 )''但是,我似乎無法爲列「b」做這樣的事情:'b <-regmatches(df1,regexpr(「[0-9] {0,0} 02+ [0-9] {1, 4}「,df1))' – squishy

+0

找到了解決方案。由於這些基於定期間隔:'a <-substr(df1,4,7)' – squishy