根据值列替换data.frame中的数值

时间:2014-05-12 16:26:22

标签: r

我有一个看起来像这样的data.frame:

DF   
col1      col2     col3      col4      
Name_1     0.3    Sample1     NA     
Name_2     0.2    Sample2     NA      
Name_3     0.9    Sample3     1   
Name_4     0.4    Sample4     NA          
Name_5     0.2    Sample5     2          

我想将col2中的数值替换为0,而在col4中有一个数字。 换句话说,所需的输出将是:

DF   
col1      col2     col3      col4      
Name_1     0.3    Sample1     NA     
Name_2     0.2    Sample2     NA      
Name_3     0      Sample3     1   
Name_4     0.4    Sample4     NA          
Name_5     0      Sample5     2   

有人能帮帮我吗?

2 个答案:

答案 0 :(得分:3)

您可以使用is.na输出的否定来查找col4不是NA的位置。

where.notNA <- !is.na(DF$col4)

此逻辑向量可用于选择要分配给0的col2中的行:

DF$col2[where.notNA] <- 0

所以,作为一个单行:

DF$col2[!is.na(DF$col4)] <- 0

答案 1 :(得分:1)

@Mattrition的答案是最好的,但这是一个ifelse方法

> DF$col2 <- ifelse(!is.na(DF$col4), 0, DF$col2) 
> DF
##     col1 col2    col3 col4
## 1 Name_1  0.3 Sample1   NA
## 2 Name_2  0.2 Sample2   NA
## 3 Name_3  0.0 Sample3    1
## 4 Name_4  0.4 Sample4   NA
## 5 Name_5  0.0 Sample5    2