【发布时间】:2015-01-22 19:49:30
【问题描述】:
我想将单个列中包含的值拆分为新列。
我在一个文件中有一些看起来像这样的数据:
> df
V1
1 00006303657102064942660780914135165036 12867 15476 15473 15474 15397 14050
2 00006319625527159782351492300309533775 12867 15473 13678 13497 15397
3 00006327933867965144524703512179615086 12867 14245 15397 15473 15474
我想将每个值分成一个新列:V1、V2、V3、V4、V5 和 V6
我试过了:df2 <- data.frame(do.call('rbind', strsplit(as.character(df$V1), ' ', fixed = FALSE)))
我最终得到这样的输出:
X1 X2 X3 X4 X5 X6
1 00006303657102064942660780914135165036 12867 15476 15473 15474 15397
2 00006319625527159782351492300309533775 12867 15473 13678 13497 15397
3 00006327933867965144524703512179615086 12867 14245 15397 15473 15474
X7 X8
1 14050 00006303657102064942660780914135165036
2 00006319625527159782351492300309533775 12867
3 00006327933867965144524703512179615086 12867
一些 v1 值最终出现在其他列中。这可能会发生,因为行尾没有空间。我怎样才能正确执行这个?
谢谢
【问题讨论】:
-
如果您将
read.table()与sep = ' '一起使用,它会起作用吗?read.csv()需要逗号作为分隔符。此外,第一行将有 7 列。第一行中的所有值都是有意的吗? -
尝试过:收到此错误:
Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, : line 1 did not have 30 elements -
R 期望每一行具有相同的列数。无论哪种方式,如果您砍掉第一行的最后一个值 (14050),那么您就是
df2 <- ...行。我不确定您的整个数据集是什么样的,因此提供更多帮助有点困难。 -
整个数据集要大得多,每行都有不同数量的列 - 基本上“00000xxxxxxxxxxxxxxx ..”是ID,其余的“12867”、“14050”等是组ID所属的。每个 ID 可以属于不同数量的组。行数以数百万计。确切的列数未知。
-
也许列表更适合您的数据集。您可能在数据框中有一行包含许多 NA,这是不可取的。