2014-02-11 2 views
1

10 개의 변수가있는 데이터 프레임이 있는데, 분명히 데이터 문제가 있습니다. 예를 들어, column1은 column2보다 크지 않아야한다고 말하지만 데이터에는이를 위반하는 항목이 있습니다. 따라서 column1> column2 인 경우 column1의 값을 column2의 해당 값으로 바꿉니다. 이제 col1, col3, col4를 col2와 비교하고 위의 논리를 모든 열에 적용하려고합니다. 나는이 잘 작동lapply in Rapple을 사용합니다.

data$col1 <- ifelse (data$col1>data$col2,data$col2,data$col1) 

같이, R의 ifelse 기능을 사용하고 있습니다.

그러나 모든 col (즉, col1, col3 및 col4)에 대해 동일한 결과를 얻을 수있는 방법이 있습니까 ? lapply을 사용하여이 작업을 수행 할 수 있다고 생각합니다.

+0

정확히 무엇을 확인 하시겠습니까? 'col1> col2, col1> col3, col1> col4' 또는 오히려'col1> col2> col3> col4'? – nico

+0

@nico 다음 점검을 원합니다 : 1. col1> col2의 설정 값 col2의 해당 값 else 변경 없음 2. col3> col2 설정 col3 = col2의 해당 값 else 변경 없음 3. col4> col2가 col4의 값을 설정하면 col2의 값이 변경됩니다. 그렇지 않은 경우 – darkage

답변

0

당신은 for으로 수행 할 수 있습니다

set.seed(31415) 
(data <- data.frame(matrix(rnorm(100), ncol=10))) 

for (i in c(1, 3, 4, 7)) { # Let's check columns 1, 3, 4 and 7 
data[, i] <- ifelse(data[, i] > data[, 2], data[, 2], data[, i]) 
} 
data 
1

이 버전은 열 2의 값 이하로 2 이외의 열의 모든 값을 설정합니다.

df[-2] <- lapply(df[-2], function(x) ifelse(x > df[[2]], df[[2]], x)) 
df 

그것은 당신이 노력하고 정확히 분명하지 않다 다음 덮인 값으로 2 이외의 모든 열을 대체

df <- as.data.frame(replicate(10, sample(1:10), simplify=F)) 
names(df) <- paste0("col", 1:10) 

지금, 당신의 목표를 달성하기 위해 lapply를 사용 : 첫째, 장난감 데이터 확인 그렇지만 명확히 할 수 있다면 좀 더 타겟 된 대답을 제공 할 수 있습니다. 잘하면이 방법으로 아이디어를 얻을 수 있습니다.

+0

입니다. 1. col1> col2의 경우 col1 = col2의 해당 값을 설정하고 그렇지 않으면 변경하지 않습니다. 2. col3> col2 col3의 값 = col2의 해당 값 else 변경 없음 3. col4> col2 인 경우 col4의 값을 설정하고 col2의 값이 해당하는 경우 변경하지 않음 – darkage