누락 된 값이 포함 된 데이터 프레임이 있습니다. 이러한 결 측값은 여러 변수에 걸쳐 있지만 특정 관측치에서 한 번에 해당 변수에서 발생합니다. 예를 들어, 내 데이터 프레임은 다음과 같습니다.
r1 = c('', 'abc def', '')
r2 = c('1', 'ghi jkl', '2')
r3 = c('', 'mno pqr', '')
df = as.data.frame(rbind(r1, r2, r3))
df $ V2에 'def'가 포함 된 모든 경우에 누락 된 값을 모두 "x"로 채우고 df $ V2에 'pqr'이 포함 된 모든 경우에 누락 된 값을 모두 "y"로 채우고 모든 행은 그대로 둡니다. df $ V2에 'jkl'이 포함되어 있습니다. 즉, 다음과 같은 데이터 프레임으로 끝내고 싶습니다.
V1 V2 V3
r1 x abc def x
r2 1 ghi jkl 2
r3 y mno pqr y
해당 행에있는 문자 변수 텍스트의 하위 집합을 기반으로 단일 행의 여러 열에있는 빈 셀을 조건부로 채우는 함수를 작성할 수 있습니까? 귀하의 도움에 감사드립니다.
다음은 데이터 프레임, 값을 변경할 열, 일치시킬 열을 입력으로 취하는 함수입니다. 또한 패턴을 캡처하기 위해 두 개의 선택적 인수를 더 포함했습니다 (귀하의 경우 def
x 및 pqr
y). 다른 모든 항목이 그대로 유지 될 것이라고 가정하여 값을 그대로 두는 세 번째 패턴을 생략했습니다. 원하는 경우 더 많은 패턴을 허용하도록 함수를 수정할 수 있습니다.
함수
f1 <- function(df, cols, match_with, to_x = 'def', to_y = 'pqr'){
df[cols] <- lapply(df[cols], function(i)
ifelse(grepl(to_x, match_with, fixed = TRUE), 'x',
ifelse(grepl(to_y, match_with, fixed = TRUE), 'y', i)))
return(df)
}
대다
#make sure your columns are characters and NOT factors
df[] <- lapply(df, as.character)
#apply the function
f1(df, cols = c('V1', 'V3'), match_with = df$V2)
# V1 V2 V3
#r1 x abc def x
#r2 1 ghi jkl 2
#r3 y mno pqr y
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다