2014-12-03 63 views
1

好的,這應該很簡單,我知道很多類似這樣的問題已經回答,但沒有任何答案適用於我的數據。根據另一列中的值子集有條件地替換多個列的行值

下面是一些簡單的例子的數據來說明我的觀點:

Soil <- c("Organic - 10", "Organic - 12", "Sand - 6", "Silt - 6", "Silt - 6") 
Value1 <- c(2, 5, 1, 4, 6) 
Value2 <- c(45, 21, 776, 2, 6) 
X03 <- c(4, 23, 45, 12, 23) 
X04 <- c(56, 2, 7, 34, 65) 

DF <- data.frame(Soil, Value1, Value2, X03, X04) 

基本上就是我想要做的是0,其中土壤是「有機」的行替換X02和X03的值。

我最初的想法是要做到以下幾點:

# create index of the columns in whcih values are to be changed 
index <- grep("^X0", colnames(DF)) 
# Use ifelse statement to change values conditionally 
DF[,c(index)] <- ifelse(grepl("^Organic", DF$Soil), 0, DF[index]) 

然而,這給出了以下警告,並在X03和X04用0代替所有的值:

Warning message: 
In `[<-.data.frame`(`*tmp*`, , c(index), value = list(0, 0, c(4, : 
    provided 5 variables to replace 2 variables 

讚賞任何想法。

回答

1

嘗試

DF[grepl("^Organic", DF$Soil),index]<-0 
+0

簡單,優雅,最好的工作!有一天,我可以自己第一次弄出這些東西!謝謝。 – 2014-12-03 17:17:45

相關問題