2015-12-22 106 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