NA
与"NA"
to不同R
,但您最喜欢的电子表格程序可能会这样解释。NA
是一个特殊的值(R
不是NaN
数字)。如果我理解正确,您的解决方案之一是将代表北美的列中的“NA”值替换为其他值,在这种情况下,您应该能够做到......
df$col[ df$col == "NA" ] <- "NorthAmerica"
这是假设您的“NA”值实际上是字符串。is.na()
如果它们是字符串,则不会返回任何值,这就是为什么df$col[ is.na(df$col) ] <- 0
不起作用。
NA和“NA”之间的区别示例:
x <- c( 1, 2, 3 , "NA" , 4 , 5 , NA )
> x[ !is.na(x) ]
[1] "1" "2" "3" "NA" "4" "5"
> x[ x == "NA" & !is.na(x) ]
[1] "NA"
解决此问题的方法
我认为您想将“NA”和任何NA
s 保留在第一个 df 中,但NA
将第二个 df 中的所有内容都rbind.fill()
更改为“NotAvailable”之类的东西。你可以像这样完成这个......
df1 <- data.frame( col = rep( "NA" , 6 ) , x = 1:6 , z = rep( 1 , 6 ) )
df2 <- data.frame( col = rep( "SA" , 2 ) , x = 1:2 , y = 5:6 )
df <- rbind.fill( df1 , df2 )
temp <- df [ (colnames(df) %in% colnames(df2)) ]
temp[ is.na( temp ) ] <- "NotAvailable"
res <- cbind( temp , df[ !( colnames(df) %in% colnames(df2) ) ] )
#df has real NA values in column z and column y. We just want to get rid of y's
df
# col x z y
# 1 NA 1 1 NA
# 2 NA 2 1 NA
# 3 NA 3 1 NA
# 4 NA 4 1 NA
# 5 NA 5 1 NA
# 6 NA 6 1 NA
# 7 SA 1 NA 5
# 8 SA 2 NA 6
#res has "NA" strings in col representing "North America" and NA values in z, whilst those in y have been removed
#More generally, any NA in df1 will be left 'as-is', whilst NA from df2 formed using rbind.fill will be converted to character string "NotAvilable"
res
# col x y z
# 1 NA 1 NotAvailable 1
# 2 NA 2 NotAvailable 1
# 3 NA 3 NotAvailable 1
# 4 NA 4 NotAvailable 1
# 5 NA 5 NotAvailable 1
# 6 NA 6 NotAvailable 1
# 7 SA 1 5 NA
# 8 SA 2 6 NA