0

私は次のデータを持っています

    path     value
1 b,b,a,c     3
2     c,b     2
3       a    10
4 b,c,a,b     0
5     e,f     0
6     a,f     1

df

df <- data.frame (path= c("b,b,a,c", "c,b", "a", "b,c,a,b" ,"e,f" ,"a,f"), value = c(3,2,10,0,0,1))

係数がなく、値ゼロでない合計数を計算したいと思います。したがって、私の望ましい出力は次のようになります。

 #desiored output
    path value
1:    b     2
2:    a     1
3:    c     2
4:    e     4
5:    f     3

たとえば、aそれは私たちが持っていない合計数を示してaおり、値はゼロではありませaん. (明確であることを願っています。さらに例が必要な場合はお知らせください)

次のコードを試しましたが、出力bが間違っています。誰かが理由を知っていますか?

total <- sum(df$value != 0)

library (splitstackshape)

#total number of total minus total number that a value is not zero 

output <-cSplit(df, "path", ",", 'long')[, .(value=total - sum(value!=0)), .(path)]

output

このコードは、正しくない次の出力になります。b

path value
1:    b     1
2:    a     1
3:    c     2
4:    e     4
5:    f     3
4

1 に答える 1

1

因子を読み取り、facsgrep を使用してカウントします。

facs <- unique(scan(textConnection(as.character(df$path)), what = "", sep = ","))
data.frame(path = facs, 
           value = colSums( !sapply(facs, grepl, as.character(df$path)) & df$value != 0 ))

与える:

  path value
b    b     2
a    a     1
c    c     2
e    e     4
f    f     3
于 2016-11-12T02:09:21.173 に答える