我有一个像这样的文件
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功能时,我失败了......非常感谢!
答案 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