在数据框中用数字 "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
将文件作为字符并在“无”上使用 strsplit
,rbind
它和 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)
我目前正在尝试导入一个只有数字的 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
将文件作为字符并在“无”上使用 strsplit
,rbind
它和 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)