我最近刚开始使用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,但它没有用。 提前致谢! :)
答案 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