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