R 基于模式将data.table列拆分为许多未知数量的列
我想将R 基于模式将data.table列拆分为许多未知数量的列,r,string,data.table,R,String,Data.table,我想将数据的B列拆分。表dt1根据其值之间的空间将其拆分为许多列 df1 <- structure(list(B = c("3,845,168 15,467,645 15,054,813 913 30,523,371", "3,104,154 12,495,278 12,298,236 223 24,793,737", "741,014 2,972,367 2,756,577 690 5,729,634", "218,044 1,035,308 1
数据的B列
拆分。表
dt1
根据其值之间的空间将其拆分为许多列
df1 <-
structure(list(B = c("3,845,168 15,467,645 15,054,813 913 30,523,371",
"3,104,154 12,495,278 12,298,236 223 24,793,737", "741,014 2,972,367 2,756,577 690 5,729,634",
"218,044 1,035,308 1,008,748 18 2,044,074", "200,744 961,775 942,901 13 1,904,689",
"17,300 73,533 65,847 5 139,385"), C = c("17,743,645", "14,456,435",
"3,287,210", "1,165,692", "1,071,138", "94,554"), D = c("102.74",
"101.60", "107.83", "102.63", "102.00", "111.67"), E = c("2.89",
"2.87", "2.96", "2.99", "3.07", "2.06")), .Names = c("B", "C",
"D", "E"), row.names = c(NA, -6L), class = "data.frame"
)
library(data.table)
dt1 <- data.table(df1)
dt1
B C D E
1: 3,845,168 15,467,645 15,054,813 913 30,523,371 17,743,645 102.74 2.89
2: 3,104,154 12,495,278 12,298,236 223 24,793,737 14,456,435 101.60 2.87
3: 741,014 2,972,367 2,756,577 690 5,729,634 3,287,210 107.83 2.96
4: 218,044 1,035,308 1,008,748 18 2,044,074 1,165,692 102.63 2.99
5: 200,744 961,775 942,901 13 1,904,689 1,071,138 102.00 3.07
6: 17,300 73,533 65,847 5 139,385 94,554 111.67 2.06
df1我们可以使用tstrsplit
tmp <- dt1[, tstrsplit(B, "\\s+")]
dt1[, paste0("B", seq_along(tmp)) := tmp]
rm(tmp)
dt1[, paste0("B", seq_len(M)) := tstrsplit(gsub(",", "", B), " ",
fixed = TRUE, type.convert = TRUE)]
更新
由于,
不在数值列中考虑,我们将其删除,并在tstrsplit
tmp <- dt1[, tstrsplit(B, "\\s+")]
dt1[, paste0("B", seq_along(tmp)) := tmp]
rm(tmp)
dt1[, paste0("B", seq_len(M)) := tstrsplit(gsub(",", "", B), " ",
fixed = TRUE, type.convert = TRUE)]
感谢@akrun提供了很好的解决方案。如果您能指导如何转换B1,…,将不胜感激,B5
转换为数值向量。Thanks@MYaseen208更新了帖子谢谢。还需要将列转换为包含
的数字。任何想法。@MYaseen208在执行拆分之前,您可以使用dt1[,(名称(dt1)):=lapply(.SD,函数(x)type.convert(as.character(x),as.is=TRUE))
]