1)read.fwf Try 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このアプローチは、開始列を見つけ、g
、フィールド2及び3とクラスタそれらを2つのグループにkmeans
を使用。それはフィールド1が常に存在していると仮定している。次に、行に2つのフィールドがある場合、それはそれが最も近いグループの中心に第2のフィールドを割り当てます。
与える
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
を最初のものは途中でスペースを持っている2つ目の終わりにスペースを持っていないのはなぜ? – Gregor
最終的なデータは3つの変数のようになります。 2番目の変数にはデータが記録されていない場合は文字列にスペースが含まれていますが、3番目の変数では文字列がちょうど切り捨てられます。 – Fred12
しかし、どうやって知っていますか?第1行目と第2行目は '' ''のように見えますが、スペースの数が変わったと言いますが、異なる結果が得られることをどのように知っていますか? 2番目の行が最初の行のように "切り落とされ"ていないことをどのように知っていますか?ロジックを説明することができれば、それをコード化することができます。 –
Gregor