对于dataframe中的每一行,将非零元素作为r中的数组返回

时间:2017-04-17 12:51:42

标签: r

我有一个R数据框,如下所示

    client      A        B         C           D
      asd     awe     0         rty         0
      wer        0       tyu     wer        0

我想要的数据框如下

    client      A        B         C           D     recom
      asd     awe     0         rty         0      awe rty
      wer        0       tyu     wer        0      tyu wer

我希望所有非零元素都以名称ccolumn打印 我正在使用以下代码来生成上面的代码,但它似乎无法正常工作

    df$recom= simplify2array(apply(df[2:5],1, function(x) paste(df[2:5]) [x!=0],collapse=" "))

2 个答案:

答案 0 :(得分:1)

尝试:

df$recom <- apply(df[, 2:5],1, function(x) paste(x[x!=0], collapse=" "))

client A B C D recom 1 asd awe 0 rty 0 awe rty 2 wer 0 tyu wer 0 tyu wer

答案 1 :(得分:1)

或者更快的选择是逐行<button type="button" class="btn btn-primary" (click)="searchfilter()"> Search here </button> 元素,然后删除0值

paste

正如我们在评论中提到的,df$recom <- trimws(gsub("^0 +| +0|0 +0", "", do.call(paste, df1[-1]))) df$recom #[1] "awe rty" "tyu wer" 调用不需要simplify2array,因为每行中的元素都是apply d,以获得paste作为输出。事实上,在OP的解决方案中,而不是使用匿名的&#39; x&#39;对于子集和后来的vector,使用了完整的数据集,即paste。所以,它应该是评论中的一个(与其他解决方案中发布的类似)