我正在尝试将paste
地址行连接到一个地址字符串。但是,有些行是空白的(""
),这意味着会插入额外的sep
并使地址看起来很难看。例如:
addr.df <- data.frame(street1=c("22B","Windsor Castle"),street2=c("Baker Street",""),city=c("London","Windsor"))
with(addr.df,paste(street1,street2,city,sep=", "))
[1] "22B, Baker Street, London" "Windsor Castle, , Windsor"
注意第二个地址中的额外,
。有没有办法围绕这个不涉及一段regexp诱导的tourettes?
答案 0 :(得分:7)
我认为你不能避免一点点的正规化。
gsub('(, )+',', ',with(addr.df,paste(street1,street2,city,sep=", ")))
(正则表达式说:用一个“逗号空间”替换多个“逗号空间”)
答案 1 :(得分:3)
它可以在一行中完成,没有regexing,但是你需要引入循环(在这种情况下通过apply)。
apply(
addr.df,
1,
function(row) paste(row[nzchar(row)], collapse = ", ")
)
答案 2 :(得分:1)
streets <- ifelse(street2=="",street1,paste(street1,street2,sep=", "))
然后在整个数据框粘贴中使用streets
代替street1
和street2
。
答案 3 :(得分:0)
我跳过正则表达式并使用一些简单的“if”条件来检查数据框中的元素数量。
保持这一点:你真的希望输出为
22B, Baker, London
而不是22B Baker, London
(数字和街道之间没有逗号)?假设后者是所需的格式,只需要做
allstreet<-paste(street1,street2,sep=" ")
然后在with
和allstreet
上运行您的city
行
使用plyr
或melt
执行此操作可能有一种更为流畅的方式: - )