我有一个包含很多列(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()
语句会很糟糕,另外,我认为这不会非常有效。
在此先感谢您的帮助。
答案 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