2014-02-11 8 views
1

У меня есть кадр данных с 10 переменными, который, очевидно, имеет некоторые проблемы с данными. Например, столбец1 не должен быть больше столбца2, но в данных у нас есть некоторые записи, которые нарушают это. Итак, предположим, что если column1> column2, замените значение в столбце 1 соответствующим значением в столбце2. Теперь я хочу сравнить col1, col3, col4 с col2 и применить ту же логику, что и выше, ко всем столбцам. Я использовал ifelse функцию в R, какИспользование lapply в R

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

это работает отлично.

Но есть ли способ, которым я могу добиться того же для всех cols (то есть, col1, col3 и col4) сразу? Я думаю, что это можно сделать, используя lapply, но не совсем уверен, как.

+0

Что именно вы хотите проверить? 'col1> col2, col1> col3, col1> col4' или, скорее,' col1> col2> col3> col4'? – nico

+0

@nico Я хочу следующие проверки: 1. Если col1> col2 заданное значение col1 = соответствующее значение col 2 else no change 2. если col3> col2 заданное значение col3 = соответствующее значение col 2 else без изменений 3. если col4> col2 установить значение col4 = соответствующее значение col 2 else no change – 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 <- as.data.frame(replicate(10, sample(1:10), simplify=F)) 
names(df) <- paste0("col", 1:10) 

Теперь используйте lapply для достижения своей цели, заменяя все, кроме 2 столбцов по блокированного значения:

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

Это не совсем ясно, что вы пытаетесь но если вы можете уточнить, я могу предоставить более целенаправленный ответ. В любом случае, надеюсь, это даст вам некоторые идеи.

+0

это то, что я хочу: 1. если col1> col2 установленное значение col1 = соответствующее значение col 2 else no change 2. если col3> col2 заданное значение col3 = соответствующее значение col 2 else no change 3. если col4> col2 заданное значение col4 = соответствующее значение col 2 else no change – darkage

Смежные вопросы