简体   繁体   English

将 url 列合并为 R 中的一列

[英]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. paste0union给了我错误,我认为我把这个想法复杂化了。

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包中的unitetidyr

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM