R分割不均匀的字符串,空格数不均匀

时间:2017-12-01 20:56:17

标签: r

我试图用多个空格分割不均匀的字符串。但是,要拆分的空格数并不总是相同的数字,例如

 "abc          20"
 "csd   10"
 "eds     10     30"

我试图获得以下内容:

"abc" " " "20"
"csd" "10" " "
"eds" "10" "30"

知道怎么做吗?请注意,基于固定数量的空格进行拆分是不可能的,因为这些会有所不同。我正在考虑在一个字符或数字引导或后跟的一个空格上分裂,但我不知道如何做到这一点。

1 个答案:

答案 0 :(得分:3)

1)read.fwf 尝试read.fwf。根据需要调整宽度。

s <- c("abc          20", "csd   10", "eds     10     30")  # test data
read.fwf(textConnection(s), widths = c(3, 7, 7))

,并提供:

   V1 V2 V3
1 abc NA 20
2 csd 10 NA
3 eds 10 30

2)kmeans 此方法查找字段2和3的起始列g,并使用kmeans将它们分组为两个组。它假定字段1始终存在,因为问题似乎就是这种情况。然后,如果一行上有两个字段,则将第二个字段分配给它最接近的组中心。

km <- kmeans(unlist(gregexpr(" \\S", s)), 2)
centers <- sort(km$centers)
g <- gregexpr(" \\S", s)
spl <- strsplit(s, " +")
f <- function(s, g) {
  if (length(s) == 2) paste0(s[1], strrep(",", which.min(abs(g - centers))), s[2])
  else paste(s, collapse = ",")
}
read.table(text = mapply(f, spl, g), sep = ",", fill = TRUE, as.is = TRUE)

,并提供:

   V1 V2 V3
1 abc NA 20
2 csd 10 NA
3 eds 10 30