Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中,如何根据可变的开始/停止位置将数据集拆分为列?_R_Function_Substr - Fatal编程技术网

在R中,如何根据可变的开始/停止位置将数据集拆分为列?

在R中,如何根据可变的开始/停止位置将数据集拆分为列?,r,function,substr,R,Function,Substr,我想根据数据集中的多对开始/停止位置拆分数据集的行 我可以用命令substr以直接的方式为每个人做这件事,但这似乎是一个糟糕的选择 实际上,我有7个数据集需要这样做,我希望有一种方法可以用开始/停止对定义一个数组/向量,然后将其提供给substr命令 任何帮助和指导都会很棒 # I have a datset which contains records like this string1 <- "08103128827DP 11 513452

我想根据数据集中的多对开始/停止位置拆分数据集的行

我可以用命令
substr
以直接的方式为每个人做这件事,但这似乎是一个糟糕的选择

实际上,我有7个数据集需要这样做,我希望有一种方法可以用开始/停止对定义一个数组/向量,然后将其提供给
substr
命令

任何帮助和指导都会很棒

# I have a datset which contains records like this

string1 <- "08103128827DP        11        513452                  131 Markett Hills Rd Coolingford XYZ 9876                                       14602012476          000000000000000000010784Y00000000000053815"
string2 <- "08203143982DP        12        611218                  12 Magicra Waters Rd Huntley XXX 9081                                           14602012476          000000000000000000010784Y00000000000038443"

# Make a dummy datset
V1 <- c(string1, string2)
myData <- data.frame(V1)
head(myData)

# I would like to split into distinct fields for each row of the typically large dataset that I have
fld_1 <- substr(myData, 0, 3)
fld_2 <- substr(myData, 4, 11)
fld_3 <- substr(myData, 12, 16)
fld_4 <- as.numeric(substr(myData, 187, 198))/100

# The field widths vary, as do the data types
#我有一个数据集,其中包含这样的记录

string1字段似乎由2个或多个空格分隔,而单个空格位于字段内,因此将任何2个或多个空格替换为tab,然后用tab分隔符读入:

read.delim(text = gsub("  +", "\t", as.character(myData$V1)), 
  as.is = TRUE, header = FALSE)

假设您有确切的起始和结束位置:

# (0) Make a dummy dataset
string1 <- "08103128827DP        11        513452                  131 Markett Hills Rd Coolingford XYZ 9876                                       14602012476          000000000000000000010784Y00000000000053815"
string2 <- "08203143982DP        12        611218                  12 Magicra Waters Rd Huntley XXX 9081                                           14602012476          000000000000000000010784Y00000000000038443"
V1 <- c(string1, string2)

# (1) Define positions and variable names
pos <- list("Var 1" = c(0, 13),
            "Var 2" = c(22, 23),
            "Var 3" = c(32, 37))

# (2) Extract variables as text
vars <- lapply(pos, function(x) {
  substr(V1, x[1], x[2])
})

# (3) Assign classes
class(vars[["Var 2"]]) <- "numeric"
class(vars[["Var 3"]]) <- "numeric"
#(0)创建虚拟数据集

string1谢谢
Dzimitry M.
这真是太棒了。我已经更新了我的代码,它就像一个符咒。我真的很感谢这个论坛上的人们花时间帮助像我这样的人。Thaks谢谢你的评论,这些文件不是以制表符分隔的,只是碰巧在示例数据中,它在数据文件中有连续空格的位置。我从Dzimitry那里得到了答案,它工作得很好。答案中没有假定文件是以制表符分隔的。假定字段之间有多个空格,字段内只有一个空格。