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
我想通过在列之间用~连接它们来创建一个“键”列。
我需要的输出-
粘贴(水果、金额、价格、sep=“~”,collapse=NULL)
但我用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
todata[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~~