【问题标题】:paste based in the number of elements in the row根据行中元素的数量粘贴
【发布时间】:2016-02-04 21:22:50
【问题描述】:

这是我的数据框

s <- data.frame(
  x = c("a","b","c"),
  y = c("d","e", NA),
  z = c(NA,"j",NA)
) 

我想连接(粘贴)基于条件的值,我想用逗号粘贴非空值,所以我想要的向量是:

a,b,c
d,e
j 

也许这很简单,但我不知道该怎么做。

【问题讨论】:

    标签: r string concatenation


    【解决方案1】:

    由于它与 GIS 或空间分析无关,因此此问题应同时迁移到 Stack Overflow。

    s <- data.frame(
      x = c("a","b","c"),
      y = c("d","e", NA),
      z = c(NA,"j",NA)
    ) 
    

    将逗号作为单个向量或按列添加:

    paste(sapply(strsplit(as.vector(na.omit(c(s[,1], s[,2], s[,3]))), ""), 
          paste, collapse=":"), collapse=", ")
    
    sapply(as.list(s), function(x) {paste(na.omit(x), collapse=", ")})    
    

    【讨论】:

    • 起来!我没有意识到我在 Gis Stack Exchange 中发布了它(我以为我在 stackoverflow 中发布了它),谢谢你的警告和回答。
    【解决方案2】:

    另一种选择是

    library(dplyr)
    s %>% 
      summarise_each(funs(toString(na.omit(.)))) %>%
      unlist(., use.names=FALSE)
    #[1] "a, b, c" "d, e"    "j" 
    

    【讨论】:

    • 不错! dplyr 确实是一个方便的库。
    猜你喜欢
    • 2022-12-21
    • 1970-01-01
    • 2019-11-07
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2013-12-11
    相关资源
    最近更新 更多