안녕하세요.
데이터 전처리하는데 어려움을 겪고있어 문의드립니다.
sample |
abc |
def(33.5412°, 127.5417°) |
ghi(33.8654°, 127.7651°) |
위 표와같은 데이터 프레임 org 를 "("를 기준으로 나누어 2개의 열(sample, location)로 만드려고 합니다.
--------------------------------------------------------------------------------
org_new <- data.table()
n <- nrow(org)
for(i in 1:n){
sample <- as.character(org[i,])
if(org[i,] != grep(intToUtf8(176), org$sample, value = T)){
org_temp <- data.frame(sample)
org_temp2 <- mutate(org_temp, location = NA)
org_new <- rbind(org_new, org_temp2)
}else {
org_split <- data.frame(str_split_fixed(sample, pattern = "\\(", n = 2))
names(org_split) <- c("sample", "location")
org_new <- data.frame(rbind(org_new, org_split))
}
}
--------------------------------------------------------------------------------
위의 코드를 작동시키면 아래 표와 같은 결과와 에러메시지가 뜹니다.
sample | location |
abc | NA |
def | 33.5412°, 127.5417°) |
ghi(33.8654°, 127.7651°) | NA |
length > 1 이라는 조건이 있고, 첫번째 요소만이 사용될 것입니다.
sample | location |
abc | NA |
def | 33.5412°, 127.5417°) |
ghi | 33.8654°, 127.7651°) |
다음과 같이 아래에도 함수가 적용되려면 어떻게 수정해야 할까요...
Comment 3
-
cardiomoon
2021.03.25 18:35
-
꼬청
2021.03.26 14:59
마지막 표와같이 분리되었으면 좋겠습니다
-
cardiomoon
2021.03.26 22:26
sample=list("abc","def(33.5412°, 127.5417°)","ghi(33.8654°, 127.7651°)")
divide=function(x){
result=unlist(strsplit(x,"\\("))
if(length(result)==1) result=c(result,NA)
result
}
result=unlist(lapply(sample,divide))
no=length(result)
sample=result[seq(1,no,2)]
location=result[seq(2,no,2)]
data.frame(sample=sample,location=location)
원하시는 최종결과가 어떤것인지요?