将列拆分为不同的列

时间:2014-06-14 07:59:54

标签: r

我使用read.table()读取.txt文件:

head(read.table("file1.txt",header=FALSE),4)
         V1
 1 1334523578
 2 4332535535
 3 7899854289
 4 1435353587

如何将此列有效地拆分为三个不同的列?前三个数字落入column1,接下来的四个数字落入column2,最后一列将有三个数字。我试过了:

  as.data.frame(matrix(as.numeric(sapply(data.frame(rbind(c(1,4,8),c(3,7,10))), function(x) substr(d1$V1, x[1], x[2]))),4,3))

   V1   V2  V3
1 133 4523 578
2 433 2535 535
3 789 9854 289
4 143 5353 587

但是,这看起来不太好。

1 个答案:

答案 0 :(得分:0)

假设您的数据框名为df,您也可以使用substr执行此操作:

df2 <- data.frame(V1 = substr(df$V1, 1, 3), 
                  V2 = substr(df$V1, 4, 7), 
                  V3 = substr(df$V1, 8, 10))

另一种选择是使用separate中的tidyr - 函数 - 包:

library(tidyr)
df2 <- separate(df, V1, c('V1','V2','V3'), sep = c(3,7))

两个选项都给出:

> df2
   V1   V2  V3
1 133 4523 578
2 433 2535 535
3 789 9854 289
4 143 5353 587

使用过的数据:

df <- structure(list(V1 = c(1334523578, 4332535535, 7899854289, 1435353587)), 
                .Names = "V1", class = "data.frame", row.names = c(NA, -4L))