计算R中列的非零值

Jay*_*han 2 r

假设我有像这样的数据帧

DF

Id X Y Z 
1  1 5 0
1  2 0 0
1  3 0 5
1  4 9 0
1  5 2 3
1  6 5 0 
2  1 5 0
2  2 4 0
2  3 0 6
2  4 9 6
2  5 2 0
2  6 5 2 
3  1 5 6
3  2 4 0
3  3 6 5
3  4 9 0
3  5 2 0
3  6 5 0
Run Code Online (Sandbox Code Playgroud)

我想计算Z特定变量的非零条目数,Id并在新列中记录该值Count,因此新数据框看起来像

DF1

Id X Y Z Count 
1  1 5 0  2
1  2 4 0  2
1  3 6 5  2
1  4 9 0  2
1  5 2 3  2
1  6 5 0  2 
2  1 5 0  3
2  2 4 0  3
2  3 6 6  3
2  4 9 6  3
2  5 2 0  3
2  6 5 2  3
3  1 5 6  2
3  2 4 0  2
3  3 6 5  2
3  4 9 0  2
3  5 2 0  2
3  6 5 0  2
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 7

我们可以使用基数R. ave

计算Z按组分组的非零值的数量Id

df$Count <- ave(df$Z, df$Id, FUN = function(x) sum(x!=0))
df$Count

#[1] 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 2 2
Run Code Online (Sandbox Code Playgroud)


Hug*_*ugo 5

你可以试试这个,它给你你想要的:

library(data.table)
dt <- data.table(df)

dt[, Count := sum(Z != 0), by = Id]

dt
#     Id X Y Z Count
#  1:  1 1 5 0     2
#  2:  1 2 0 0     2
#  3:  1 3 0 5     2
#  4:  1 4 9 0     2
#  5:  1 5 2 3     2
#  6:  1 6 5 0     2
#  7:  2 1 5 0     3
#  8:  2 2 4 0     3
#  9:  2 3 0 6     3
# 10:  2 4 9 6     3
# 11:  2 5 2 0     3
# 12:  2 6 5 2     3
# 13:  3 1 5 6     2
# 14:  3 2 4 0     2
# 15:  3 3 6 5     2
# 16:  3 4 9 0     2
# 17:  3 5 2 0     2
# 18:  3 6 5 0     2
Run Code Online (Sandbox Code Playgroud)