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이 방법은 시작 열을 발견 g
필드 (2, 3) 및 클러스터들을 두 그룹으로 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
왜 첫 번째는 중앙과 두 번째의 공간이 않는 한 끝에 공백은? – Gregor
최종 데이터가 ... 세 변수처럼 보이는 방법입니다. 두 번째 변수에는 데이터가 기록되지 않았을 때 문자열에는 공백이 포함되는 반면 세 번째 변수에는 문자열이 잘려나갑니다. – Fred12
하지만 어떻게 알 수 있습니까? 첫 번째 줄과 두 번째 줄은 모두 ""와 같이 표시되며 공백 수는 다양하므로 결과가 달라진다는 것을 어떻게 알 수 있습니까? 두 번째 행이 첫 번째 행처럼 잘리지 않는다는 것을 어떻게 알 수 있습니까? 논리를 설명 할 수 있다면 코드를 작성할 수 있습니다. –
Gregor