2017-02-16 90 views
-2

我有使用for循环的问题。我的问题是:如果两列相等(有176或184或180或182或163或167的值)替换两列= NULL比较两列并替换为R包

我写了脚本,但它不起作用。

for (i in dane.dzikie$REN75M10 && dane.dzikie$REN75M10.1) if (i==176 | 184 | 180 | 182 | 
                  163 | 167) {i=NULL} 

这是我的数据的一部分: enter image description here

我想换成第一,第五和最后一列,应更换为NA,因为两列包含176或184或180或182或值或163或167。这两个列中的条件是相同的值。

+1

请仔细阅读如何提问以及如何提供可重复的示例。请记住,R是矢量化的。大部分时间For-loops不是答案。 – Heroka

+0

另外,不能使用'|'作为“或”来表示数字(或者'&&'表示这些变量是什么),只能用于已经是布尔值的东西。相反,在%c(176,184,...)'中使用'i%'。你不能(很容易)将NULL放在data.frame中;你可能是指'NA'。 – alistaire

回答

0
# example dataframe something like this? 
dane.dzikie <- data.frame(REN75M10=c(176, 184, 5, 6, 7), 
          REN75M10.1=c(163,1,2,3,4), OTHER=c(163,2,3,4,5)) 

columns=c("REN75M10", "REN75M10.1") 
invalid.values <- c(176,184,180,182,163,167) 
dane.dzikie[,columns] <- 
    apply(dane.dzikie[,columns], 2, 
     function(x) ifelse(x %in% invalid.values, NA, x))       
+0

它与我的问题类似,但它应该是这样的:如果我在行中有两个值,例如它应该取代NA。只有176位在同一行的两列中。 –