替换字符串数据框

时间:2013-09-09 14:43:08

标签: r

我有一个像这样的文件

1880.1.1    74
1881.1.1    74
1882.1.1    75
1883.1.1    79
1884.1.1    111
1885.1.1    145

我想创建一个像这样的数据框

1880    1    1  74
1881    1    1  74
1882    1    1  75
1883    1    1  79
1884    1    1  111
1885    1    1  145

但是当我尝试使用gsub功能时,我失败了......非常感谢!

3 个答案:

答案 0 :(得分:5)

您可以使用我的“splitstackshape”软件包中的concat.split,以便更方便地执行您要执行的操作。假设您的data.frame被称为“mydf”而第一列被称为“V1”,您可以这样做:

> library(splitstackshape)
> concat.split(mydf, "V1", sep = ".", drop = TRUE)
   V2 V1_1 V1_2 V1_3
1  74 1880    1    1
2  74 1881    1    1
3  75 1882    1    1
4  79 1883    1    1
5 111 1884    1    1
6 145 1885    1    1

这里,“mydf”定义为:

mydf <- structure(list(V1 = c("1880.1.1", "1881.1.1", "1882.1.1", "1883.1.1", 
  "1884.1.1", "1885.1.1"), V2 = c(74L, 74L, 75L, 79L, 111L, 145L)), 
  .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, -6L))

基数R中的等价物是使用如下内容:

> cbind(read.table(text = as.character(mydf$V1), sep = "."), mydf[-1])
    V1 V2 V3  V2
1 1880  1  1  74
2 1881  1  1  74
3 1882  1  1  75
4 1883  1  1  79
5 1884  1  1 111
6 1885  1  1 145

答案 1 :(得分:2)

尽管Anandas的R基础解决方案更简单,更好,但这是使用strsplit的另一种方法

> data.frame(t(sapply(strsplit(mydf[,"V1"], "\\." ), as.numeric)), X4=mydf[, "V2"])
    X1 X2 X3  X4
1 1880  1  1  74
2 1881  1  1  74
3 1882  1  1  75
4 1883  1  1  79
5 1884  1  1 111
6 1885  1  1 145

答案 2 :(得分:1)

这是一种strsplit方法。我使用了@ Ananda的数据。

> data.frame(t(mapply(cbind,strsplit(mydf[,1],split='[:.:]'))),mydf[,2])
    X1 X2 X3 mydf...2.
1 1880  1  1        74
2 1881  1  1        74
3 1882  1  1        75
4 1883  1  1        79
5 1884  1  1       111
6 1885  1  1       145