2014-02-11 68 views
1

我有一个包含10个变量的数据框,这显然有一些数据问题。例如,说column1不应该大于column2,但是在数据中我们有一些违反这个的条目。因此,我们假设如果column1> column2,将column1中的值替换为column2中的相应值。 现在我想比较col1,col3,col4和col2,并将与上面相同的逻辑应用于所有列。 我已经使用R中的ifelse功能,如在R中使用lapply

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的相应值其他没有变化 2. if col3> col2 col3的设置值= col 2的相应值其他没有变化 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的相应值否则不变 2。如果col3> col2设置col3的值= col 2的对应值其他没有变化 3.如果col4> col2设置col4的值= col 2的相应值否则不改变 – darkage