gpt4 book ai didi

r - 将一个字符串拆分多个空格

转载 作者:行者123 更新时间:2023-12-01 00:43:53 25 4
gpt4 key购买 nike

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

Name                  Country            Age
John,Smith United Kingdom 20
Washington,George USA 50
Martin,Joseph Argentina 43

我遇到的问题是“列”用空格分隔,这样它们都排列得很好,但一行可能在值和接下来的 10 个空格之间有 5 个空格。所以当我使用 read.delim 加载它时我得到一个一列 data.frame
"John,Smith            United Kingdom     20"

作为第一次观察等等。

有什么办法可以:
  • 将数据加载到 R 中为可用格式?或
  • 一旦我以一列格式加载字符串,将字符串拆分为单独的列?

  • 我的想法是用空格分割字符串,除非它需要在 2 到 x 个空格之间(例如, "United Kingdom" 保持在一起并且不会变成 "United" "" "Kingdom" )。但我不知道这是否可能。

    我试过 strsplit(data.frame[,1], sep="\\s")但它返回一个字符串列表,如:
    "John,Smith" "" "" "" "" "" "" "" "United" "" "Kingdom" "" ""...

    我不知道该怎么办。

    最佳答案

    具有所有“排列整齐”的列是固定宽度数据的典型特征。

    为了这个答案,我已经将您的三行数据和一行标题信息写入了一个名为“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)

    R 有它自己的读取固定宽度数据的功能( read.fwf ),但众所周知它很慢,您需要在开始之前知道宽度。如果文件很小,我们可以计算这些,然后使用类似的东西:
    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

    或者,您可以让 fwf_widths从“readr”包中为您猜测宽度,然后使用 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

    关于r - 将一个字符串拆分多个空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35979433/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com