[英]Combine columns of urls into one column in R
I have three columns of Facebook, Twitter, and Instagram URLS like the following:我有三列 Facebook、Twitter 和 Instagram URL,如下所示:
df <- data.frame(fb_url = c("www.facebook.com/...", "www.facebook.com/...",NA,NA,NA,NA),
tw_url = c(NA, NA, "www.twitter.com/...", "www.twitter.com/...",NA,NA),
ig_url = c(NA, NA, NA, NA, "www.instagram.com/...", "www.instagram.com/..."))
> df
fb_url tw_url ig_url
www.facebook.com/... NA NA
www.facebook.com/... NA NA
NA www.twitter.com/... NA
NA www.twitter.com/... NA
NA NA www.instagram.com/...
NA NA www.instagram.com/...
and I just want to merge them into one column that'd look like this:我只想将它们合并到一个看起来像这样的列中:
url
www.facebook.com/...
www.facebook.com/...
www.twitter.com/...
www.twitter.com/...
www.instagram.com/...
www.instagram.com/...
paste0
and union
are giving me errors, and I think I'm overcomplicating this idea. paste0
和union
给了我错误,我认为我把这个想法复杂化了。
The columns are all factor
(as stringsAsFactors = TRUE
by default in data.frame
call), so it can be converted to character
class and then use coalesce
列都是
factor
(在data.frame
调用中默认为stringsAsFactors = TRUE
),因此可以将其转换为character
类然后使用coalesce
library(dplyr)
df %>%
mutate_all(as.character) %>%
transmute(url = coalesce(!!! .))
# url
#1 www.facebook.com/...
#2 www.facebook.com/...
#3 www.twitter.com/...
#4 www.twitter.com/...
#5 www.instagram.com/...
#6 www.instagram.com/...
You can also do it using base R:您也可以使用基本 R 来做到这一点:
df <- data.frame(fb_url = c("www.facebook.com/...", "www.facebook.com/...",NA,NA,NA,NA),
tw_url = c(NA, NA, "www.twitter.com/...", "www.twitter.com/...",NA,NA),
ig_url = c(NA, NA, NA, NA, "www.instagram.com/...", "www.instagram.com/..."),
stringsAsFactors = FALSE)
data.frame(url = na.omit(unlist(df)),
row.names = NULL)
#> url
#> 1 www.facebook.com/...
#> 2 www.facebook.com/...
#> 3 www.twitter.com/...
#> 4 www.twitter.com/...
#> 5 www.instagram.com/...
#> 6 www.instagram.com/...
You can do it using unite
from tidyr
package:您可以使用
tidyr
包中的unite
来tidyr
:
df[] <- lapply(df, as.character) ## convert data frame to character class
tidyr::unite(df, url, na.rm = T) ## then merge all the columns into url column with removing nas
# url
#1 www.facebook.com/...
#2 www.facebook.com/...
#3 www.twitter.com/...
#4 www.twitter.com/...
#5 www.instagram.com/...
#6 www.instagram.com/...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.