더 나은 방법을 찾고 있습니다. R이 여러 열의 유연한 하위 집합의 값을 요소별로 ( Var2
그리고 Var3
여기에) 확인하고 검사 결과를 새 논리 열에 기록하도록하려면 어떻게해야합니까?
apply()
여기에서 행 단위를 사용하는 것보다 더 짧고 우아한 방법이 있습니까?
df <- read.csv(
text = '"Var1","Var2","Var3"
"","",""
"","","a"
"","a",""
"a","a","a"
"a","","a"
"","a",""
"","",""
"","","a"
"","a",""
"","","a"'
)
criticalColumns <- c("Var2", "Var3")
df$criticalColumnsAreEmpty <-
apply(df[, criticalColumns], 1, function(curRow) {
return(all(curRow == ""))
})
명시적인 방법으로도이 작업을 수행 할 수 있지만 융통성이 없습니다.
df$criticalColumnsAreEmpty <- df$Var2 == "" & df$Var3 == ""
원하는 출력 :
Var1 Var2 Var3 criticalColumnsAreEmpty
TRUE
a FALSE
a FALSE
a a a FALSE
a a FALSE
a FALSE
TRUE
a FALSE
a FALSE
a FALSE
rowSums
논리 행렬에서 사용할 수 있습니다 .
df$criticalColumnsAreEmpty <- !rowSums(df[criticalColumns]!="")
df$criticalColumnsAreEmpty
#[1] TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
또는 또 다른 옵션 (메모리상의 이유로 행렬로 변환을 방지하기위한 큰 데이터 세트의 경우)은 열에 대해 루프를 수행하고 요소가 비어 있는지 확인 Reduce
하고&
Reduce(`&`, lapply(df[criticalColumns], function(x) !nzchar(as.character(x))))
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다