将/ NA更改为R中的特殊值

时间:2015-11-06 21:56:32

标签: r

我有一个data.table表,大约有50,000行。有两列。有很多" / NA"在它。

示例:

  V1 V2
  A 1    
  B 2    
  A 1    
  C 3    
  A NA    
  B 2    
  C 3    
  A /NA    
  B /NA    
  A 1

我想要

V1 V2        
 A 1    
 B 2    
 A 1    
 C 3    
 A 1    
 B 2    
 C 3    
 A 1    
 B 2    
 A 1

我该如何完成?

非常感谢,贾斯汀

2 个答案:

答案 0 :(得分:0)

tf <- tempfile()
writeLines(" V1    V2  
  A     A   
            B     B                  
            A     A    
            C     C    
            A     NA    
            B     B    
            C     C    
            A    /NA    
            B    /NA    
            A    A", tf )

x <- read.table(tf, header=T, stringsAsFactors = F)
x$V2 <- ifelse(gsub("[/]","", x$V2) == "NA" | is.na(x$V2), x$V1, x$V2)

R> x
   V1 V2
1   A  A
2   B  B
3   A  A
4   C  C
5   A  A
6   B  B
7   C  C
8   A  A
9   B  B
10  A  A

修改

新问题需要第二个ifelse()子句(或switch)来解析V1V2。请注意,我已通过!

切换了初始条款的评估
x$V2 <- ifelse(!(gsub("[/]","", x$V2) == "NA" | is.na(x$V2)), x$V2, 
          ifelse(x$V1 == "A", 1, ifelse(x$V1 == "B", 2,3)))

答案 1 :(得分:0)

您可以使用R中的数据框来获得相同的结果

example <- data.frame(V1 = c("A","B","A","C","A","B","C","A","B","A"), V2=c(1,2,1,3,"NA",2,3,"/NA","/NA",1), stringsAsFactors = FALSE) example <- within(example, V2[V1=="A" & (V2=="NA" | V2=="/NA")] <-1) example <- within(example, V2[V1=="B" & (V2=="NA" | V2=="/NA")] <-2) example <- within(example, V2[V1=="C" & (V2=="NA" | V2=="/NA")] <-3)