【问题标题】:Concatenate columns if they don't contain a zero如果列不包含零,则连接它们
【发布时间】:2021-11-10 13:27:50
【问题描述】:

我试图将 4 个Columns 连接到一个名为“tags”的列中,以供以后使用多标签分类。我想以一种仅提供输出的方式连接列,仅粘贴不为零的列并用逗号分隔它们。 例如,最后一行的单元格是 {1,2} 而不是 {1,2,0,0}

我目前没有可以根据需要运行的代码,也无法在 Internet 上找到任何东西。你们有什么建议吗?

当前代码:

df$TV[df$TV==1] = '1'
df$Internet[df$Internet ==1] = '2'
df$Mobil[df$Mobil==1] = '3'
df$Fastnet[df$Fastnet==1] = '4'
df$tags = paste(df$TV,df$Internet,df$Mobil,df$Fastnet,  sep=",")

【问题讨论】:

    标签: r classification


    【解决方案1】:

    使用apply 的基本 R 选项 -

    cols <- c('TV', 'Internet', 'Mobil', 'Fastnet')
    #df <- read.csv('stack.csv')
    df$tags <- apply(df[cols], 1, function(x) toString(x[x!= 0]))
    df
    

    dplyr 我们可以使用rowwise -

    library(dplyr)
    
    df <- df %>%
      rowwise() %>%
      mutate(tags = {
        tmp <- c_across(all_of(cols))
        toString(tmp[tmp != 0])
      }) %>%
      ungroup
    
    df
    

    【讨论】:

    • 嗨,感谢您的快速响应 - 基本 R 选项对我不起作用。当我尝试 dplyr 时,我收到以下错误“错误:c_across() 只能在 dplyr 动词中使用。”
    • @Mads-EmilHvidRasmussen 不起作用是什么意思?它是否给出错误或给出不正确的输出?您能否以可重现的格式提供数据,以便更容易使用。我们无法从图像中复制数据。
    • 输出错误。这是下载我拥有的数据框子集的链接filemail.com/d/dykpspfyklhzodl
    • 使用R base 时,将“text”列中的文本字符串放入“tags”列。
    • @Mads-EmilHvidRasmussen 尝试更新的答案。
    【解决方案2】:

    我们可以使用来自collapsedapply

    library(collapse)
    cols <- c('TV', 'Internet', 'Mobil', 'Fastnet')
    df$tags <- dapply(slt(df, cols) MARGIN = 1, FUN = function(x) toString(x[x != 0]))
    

    数据

    df <- data.frame(TV = c(1, 3, 2, 0), Internet = c(1, 0, 1, 4), Mobil = c(0, 1, 3, 2), Fastnet = c(1, 5, 3, 2))
    

    【讨论】:

      猜你喜欢
      • 2016-06-24
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-15
      相关资源
      最近更新 更多