在数据框中用数字 "by nothing" 拆分列

Splitting column with numbers "by nothing" in a dataframe

我目前正在尝试导入一个只有数字的 txt dataset。当我导入它时,我使用;

k2= read.delim("dummy.txt", stringsAsFactors = F, header = F, sep="",colClasses = "character")

但不幸的是,这似乎使列与 this. 之类的列仅结合在一起,而且它并没有“一无所获”。读取 table 得到相同的结果。

我试图将列分成多列,其中每个数字都在一个单独的列中(有 297 个数字,所有数字都是分开的)。我用 tidyr 试过这些;

1- k2 %>% separate(as.character(k2$V1), 1:297, "")

2- apply(k2,2,k2 %>% separate(as.character(k2$V1), 1:297, sep= ""))

但在两者中都收到此消息:必须提取具有单个有效下标的列。 x 下标 var 的大小为 555514,但必须为 1。

我想导入所有拆分的数据集或使用代码拆分它们。

我和apply家族关系不融洽,也欢迎好的教程建议。

您可以 scan 将文件作为字符并在“无”上使用 strsplitrbind 它和 type.convert

scan('foo.txt', what='A', quiet=TRUE) |> strsplit('') |> do.call(what=rbind) |> 
  type.convert(as.is=TRUE) |> as.data.frame()
#   V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
# 1  1  1  1  1  2  2  2  1  9   9
# 2  1  1  2  2  2  9  9  1  1   9
# 3  1  9  1  1  2  9  2  1  2   2
# 4  9  9  2  2  2  2  1  1  2   2
# 5  9  9  1  1  2  2  2  2  2   9

注意: R >= 4.1 使用。


数据:

set.seed(42)
replicate(5, paste(sample(c(1, 2, 9), 10, replace=TRUE), collapse='')) |> 
  as.matrix() |> writeLines('foo.txt')
library(dplyr)

# nums <- read.table('nums.txt', colClasses = "character")

假设你有这样的文件结构:

nums <- structure(list(V1 = c("003111222", "212251256")), 
                  class = "data.frame", row.names = c(NA, -2L))

然后您可以遍历所有值并将子字符串值放入单独的列中,这将形成一个数据框。

outs <- lapply(nums, function(x){
  x <- unname(x)
  rows <- lapply(1:nchar(x), function(i){
    val <- substr(x, i, i)
    data.frame(val)
  }) %>% 
    bind_cols
  colnames(rows) <- paste0('col',1:nchar(x))
  rows
}) %>% bind_rows

print(outs)