有没有一种方法可以根据数据框的列范围更改行的值?

时间:2019-07-09 09:11:51

标签: r dplyr

我有一个包含很多列(172)和许多行的数据框,并且我需要根据同一数据框上的列范围更改一个列的值。

COL1  COL2 COL3 ... COL17 ...
1           
2           X
3                d
4                    98          

在上一个数据帧中,如果COL3到COL17范围内的列的 ANY 具有任何值,我想将COL2的值更改为“错误”。预期结果将是:

    COL1  COL2    COL3 ... COL17 ...
     1           
     2    error    X
     3    error        d
     4    error              98          

如上所述,第一行没有错误,因为在COL3和COL17之间没有值,但是其他行在COL2中出现了错误,因为在COL3,COL17或这两个之间的任何列中都有值。

我知道我可以使用ifelse()来实现,但是我需要检查的行数相当大(范围大约为50列),因此ifelse()语句会很糟糕,另外,我认为这不会非常有效。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以paste的列值,然后使用ifelse检查空值:

#Creating a sample dataframe
df <- data.frame(Col1 = c(1:4), Col2 = c("","","",""), Col3 = c("", "X", "", ""), Col4 = c("", "", "D", ""), Col5 = c("","", "", 98))
df
  Col1 Col2 Col3 Col4 Col5
1    1                    
2    2         X          
3    3              D     
4    4                  98

#pasting the column values and adding "error" if the paste is not empty
df$Col2 <- ifelse(do.call(paste, c(df[c(3:5)], sep="")) == "", "ok", "error")
df
  Col1  Col2 Col3 Col4 Col5
1    1    ok               
2    2 error    X          
3    3 error         D     
4    4 error             98