如何将NA替换为paste()中的空白?

时间:2019-10-09 12:20:48

标签: r concatenation rstudio paste

我有一个数据框

  Fruit  Amount  Price
  Apple    2      20
  Banana   NA     59
  Grapes   NA     NA

我想通过在列之间使用〜将它们链接在一起来创建“键”列。 我需要的输出-

  1. 苹果〜2〜20
  2. 香蕉~~ 59
  3. 葡萄~~

当前使用paste(fruit, amount,price, sep="~", collapse=NULL) 但是我得到的输出是NA-

  1. 香蕉〜NA〜59
  2. 葡萄〜NA〜NA 对可以使用的其他任何功能有帮助吗?

3 个答案:

答案 0 :(得分:0)

试试这个-

output <- paste(fruit, amount,price, sep="~", collapse=NULL)
gsub("NA",'',output)

输入数据:

fruit <- c('Apple','Banana','Grapes')
amount <- c(100,20,NA)
price <- c(NA,60,10)

答案 1 :(得分:0)

您可以将NAs替换为空字符串,然后使用经过修改的data.frame

df <- read.table(text = "Fruit Amount Price
Apple 2 20
Banana NA 59
Grapes NA NA", header = TRUE, stringsAsFactors = FALSE)

df[is.na(df)] = ""
apply(df, 1, paste, collapse = "~")

# "Apple~2~20" "Banana~~59" "Grapes~~"  

答案 2 :(得分:0)

这是不需要更改原始数据集或生成另一个数据集的解决方案:

data$key<-apply(data,1,function(x) paste(ifelse(is.na(x),"",x),collapse="~"))

   Fruit Amount Price         key
1  Apple      2    20 Apple~ 2~20
2 Banana     NA    59  Banana~~59
3 Grapes     NA    NA    Grapes~~