根据字符创建新表

时间:2015-12-22 18:00:38

标签: arrays r regex

我有两个问题。

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开头的列?

1 个答案:

答案 0 :(得分: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