Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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 - Fatal编程技术网

R 将字符串拆分为多个空格

R 将字符串拆分为多个空格,r,R,我正在尝试将以下格式的一些数据加载到R中(作为文本文件) 我遇到的问题是,“列”之间用空格分隔,这样它们就可以很好地排列起来,但是一行的值和下一行的10个空格之间可能有5个空格。因此,当我使用read.delim加载它时,我会得到一个带有 "John,Smith United Kingdom 20" 作为第一次观察等等 我有没有办法: 将数据加载到R中,使其成为可用的格式?或 以单列格式加载字符串后,是否将其拆分为单独的列 我的想法是按空格分割字符串,但它需要在2

我正在尝试将以下格式的一些数据加载到R中(作为文本文件)

我遇到的问题是,“列”之间用空格分隔,这样它们就可以很好地排列起来,但是一行的值和下一行的10个空格之间可能有5个空格。因此,当我使用
read.delim
加载它时,我会得到一个带有

"John,Smith            United Kingdom     20"
作为第一次观察等等

我有没有办法:

  • 将数据加载到R中,使其成为可用的格式?或
  • 以单列格式加载字符串后,是否将其拆分为单独的列
  • 我的想法是按空格分割字符串,但它需要在2到x空格之间(例如,
    “联合王国”
    保持在一起,而不是变成
    “联合王国”
    )。但我不知道这是否可能

    我尝试了strsplit(data.frame[,1],sep=“\\s”),但它返回一个字符串列表,如:

    "John,Smith" "" "" "" "" "" "" "" "United" "" "Kingdom" "" ""...
    

    我不知道该怎么处理。

    如果您的列不包含超过1个空格的单词,您可以使用base
    R

    txt = "Name                  Country            Age
    John,Smith            United Kingdom     20
    Washington,George     USA                50
    Martin,Joseph         Argentina          43"
    
    conn = textConnection(txt)
    do.call(rbind, lapply(readLines(conn), function(u) strsplit(u,'\\s{2,}')[[1]]))
    #     [,1]                [,2]             [,3] 
    #[1,] "Name"              "Country"        "Age"
    #[2,] "John,Smith"        "United Kingdom" "20" 
    #[3,] "Washington,George" "USA"            "50" 
    #[4,] "Martin,Joseph"     "Argentina"      "43" 
    
    具有所有“整齐排列”的列是固定宽度数据的典型特征

    为了回答这个问题,我已经将您的三行数据和一行标题信息写入了一个名为“x”的临时文件。对于您的实际使用,请将“x”替换为文件名/路径,就像您通常在
    read.delim
    中使用的那样

    以下是示例数据:

    x <- tempfile()
    cat("Name                  Country            Age\nJohn,Smith            United Kingdom     20\nWashington,George     USA                50\nMartin,Joseph         Argentina          43\n", file = x)
    
    或者,您可以让“readr”软件包中的
    fwf_宽度
    为您猜测宽度,然后使用
    read_fwf

    library(readr)
    read_fwf(x, fwf_empty(x, col_names = c("Name", "Country", "Age")), skip = 1)
    #                Name        Country Age
    # 1        John,Smith United Kingdom  20
    # 2 Washington,George            USA  50
    # 3     Martin,Joseph      Argentina  43
    

    看起来您有固定宽度的数据。改为看
    read.fwf
    。(或者从“readr”包中读取
    read_fwf
    )。参数应该是拆分的,而不是sep,应该是
    '\\s{2,}'
    ,如
    rl中所示。好奇的是,有没有人见过一个读取函数,它为
    sep
    (或者至少是一个量词)占用多个字符?还是我被困在“gsubfn”中的
    strsplit
    ?@alistaire,
    read.pattern
    read.fwf(x, c(22, 18, 4), strip.white = TRUE, skip = 1, 
             col.names = c("Name", "Country", "Age"))
    #                Name        Country Age
    # 1        John,Smith United Kingdom  20
    # 2 Washington,George            USA  50
    # 3     Martin,Joseph      Argentina  43
    
    library(readr)
    read_fwf(x, fwf_empty(x, col_names = c("Name", "Country", "Age")), skip = 1)
    #                Name        Country Age
    # 1        John,Smith United Kingdom  20
    # 2 Washington,George            USA  50
    # 3     Martin,Joseph      Argentina  43