R 如何用paste()中的空格替换NAs?

R 如何用paste()中的空格替换NAs?,r,concatenation,rstudio,paste,R,Concatenation,Rstudio,Paste,我有一个数据帧 Fruit Amount Price Apple 2 20 Banana NA 59 Grapes NA NA 我想通过在列之间用~连接它们来创建一个“键”列。 我需要的输出- 苹果~2~20 香蕉~~ 59 葡萄~~ 当前正在使用粘贴(水果、金额、价格、sep=“~”,collapse=NULL) 但我用NA获得了输出- 香蕉~NA~59 ~NA~NA 关于可以使用的任何其他功能的任何帮助 试试这个- output

我有一个数据帧

  Fruit  Amount  Price
  Apple    2      20
  Banana   NA     59
  Grapes   NA     NA
我想通过在列之间用~连接它们来创建一个“键”列。 我需要的输出-

  • 苹果~2~20
  • 香蕉~~ 59
  • 葡萄~~
  • 当前正在使用
    粘贴(水果、金额、价格、sep=“~”,collapse=NULL)
    但我用NA获得了输出-

  • 香蕉~NA~59
  • ~NA~NA 关于可以使用的任何其他功能的任何帮助
  • 试试这个-

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

    output您可以用空字符串替换
    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~~"  
    

    df这里有一个不需要更改原始数据集或生成附加数据集的解决方案:

    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~~
    

    data$keySo我面临的问题是,我在问题中使用的数据帧只是一个虚拟示例。真正的一个包含超过15列,其中我需要选择7列以这种方式连接(可能不是连续的)。行数也超过300000行。使用此函数连接所有列,而不是特定列。这很简单,只需在
    apply
    to
    data[COLS]
    中替换
    data
    ,其中COLS是要连接的所有列名的字符串向量。我运行此操作后,Rstudio没有响应。真正的数据集有超过300000行。等待15分钟,等待它回复,当它最终正常运行时,NAs仍然存在。没有被空白所取代。我想知道这是否是由于数据帧的巨大尺寸造成的。
    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~~