按R中的唯一因子计算数据

时间:2014-11-15 11:54:26

标签: r count factors

我最近刚开始使用R而且我想出了一个我找不到解决方法的问题。 我想在我的数据中分配一列,另一列的一组因子的频率值。 我的数据如下:

 ID_GRI                                         LABEL        Diversity
1       1                                                   0         0
2       1                                  Paduri_de_conifere         0
3       1                                    Pajisti_NAturale         0
4       1                                    Pajisti_NAturale         0
5       1                                    Pajisti_NAturale         0
6       1                                    Pajisti_NAturale         0
7       1                                    Pajisti_NAturale         0
8       2                                                   0         0 
9       2                                  Paduri_de_conifere         0
10      2                                  Paduri_de_conifere         0
11      2                                  Paduri_de_conifere         0
12      2                                    Pajisti_NAturale         0 
13      2                                    Pajisti_NAturale         0
14      2                                    Pajisti_NAturale         0
15      2                                    Pajisti_NAturale         0
16      2                                    Pajisti_NAturale         0
17      2 Zone_de_tranzitie_cu_arbusti_(in_general_defrisate)         0
18      3                                                   0         0
19      3                                  Paduri_de_conifere         0
20      3                                    Pajisti_NAturale         0

LABEL列是一个因子变量,使用 fill = T 子句从excel导入,因为我的单元格为空。 现在,我想为Diversity列分配与ID_GRI对应的每个唯一LABEL类型的值。 它应该是这样的:

 ID_GRI                                         LABEL         Diversity
1       1                                                   0         2
2       1                                  Paduri_de_conifere         2
3       1                                    Pajisti_NAturale         2
4       1                                    Pajisti_NAturale         2
5       1                                    Pajisti_NAturale         2
6       1                                    Pajisti_NAturale         2
7       1                                    Pajisti_NAturale         2
8       2                                                   0         3
9       2                                  Paduri_de_conifere         3
10      2                                  Paduri_de_conifere         3
11      2                                  Paduri_de_conifere         3
12      2                                    Pajisti_NAturale         3
13      2                                    Pajisti_NAturale         3
14      2                                    Pajisti_NAturale         3
15      2                                    Pajisti_NAturale         3
16      2                                    Pajisti_NAturale         3
17      2 Zone_de_tranzitie_cu_arbusti_(in_general_defrisate)         3
18      3                                                   0         2
19      3                                  Paduri_de_conifere         2
20      3                                    Pajisti_NAturale         2

我尝试过使用sapply和data.table,但它没有用。 提前致谢! :)

2 个答案:

答案 0 :(得分:0)

假设LABEL列属于班级factor

df$Diversity <- with(df, as.numeric(ave(as.character(LABEL), 
            ID_GRI, FUN=function(x) length(unique(x[x!=0])))))
df$Diversity
#[1] 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2

或使用data.table

library(data.table)
setDT(df)[, Diversity:=length(unique(LABEL[LABEL!=0])), by=ID_GRI]

答案 1 :(得分:0)

sapply单行:

> sapply(df$ID_GRI, function(x) length(unique(df$LABEL[df$ID_GRI==x]))-1)
[1] 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 2 2 2