R 如何计算每个组中唯一名称的#
有人能告诉我如何在R中完成以下工作吗?我想计算每个组中唯一的人的数量,如下图所示,第一列对应于每个组(这里有3个组),第二列表示人的名字(例如,在组1中,人A的名字显示3次。第三列是我想在R中生成的(如果某人的名字在某一组中出现x次,则最后一列应显示x)。谢谢大家R 如何计算每个组中唯一名称的#,r,sorting,unique,repeat,R,Sorting,Unique,Repeat,有人能告诉我如何在R中完成以下工作吗?我想计算每个组中唯一的人的数量,如下图所示,第一列对应于每个组(这里有3个组),第二列表示人的名字(例如,在组1中,人A的名字显示3次。第三列是我想在R中生成的(如果某人的名字在某一组中出现x次,则最后一列应显示x)。谢谢大家 x <- read.table(header=T, text="group peoplename noofuniquepeople 1 A 3 1 B 1 1 A 3 1 A 3 1 D 1 2 M 1 2 K 2 2
x <- read.table(header=T, text="group peoplename noofuniquepeople
1 A 3
1 B 1
1 A 3
1 A 3
1 D 1
2 M 1
2 K 2
2 T 3
2 T 3
2 K 2
2 T 3
3 E 2
3 F 1
3 E 2
3 G 2
3 G 2
3 V 1")
x理想情况下,您应该先输入您尝试过的内容。我们可以帮助您调试
不管怎样
> df = data.frame(N = c("A","B","A","A","D","M","K","T","T","K","T","E","F","E","G","G","V"), G = c(3,1,3,3,1,1,2,3,3,2,3,2,1,2,2,2,1))
> df
N G
1 A 3
2 B 1
3 A 3
4 A 3
5 D 1
6 M 1
7 K 2
8 T 3
9 T 3
10 K 2
11 T 3
12 E 2
13 F 1
14 E 2
15 G 2
16 G 2
17 V 1
> numberOfGroups = length(unique(df$G))
> numberOfGroups
[1] 3
> require(plyr)
> uniqueInGroup <- dlply(df,.fun=unique,.variables=.(G))
> uniqueInGroup
$`1`
N G
1 B 1
2 D 1
3 M 1
4 F 1
5 V 1
$`2`
N G
1 K 2
3 E 2
5 G 2
$`3`
N G
1 A 3
4 T 3
attr(,"split_type")
[1] "data.frame"
attr(,"split_labels")
G
1 1
2 2
3 3
lapply(uniqueInGroup, function(x) return(length(unique(x$N))))
>df=data.frame(N=c(“A”、“B”、“A”、“A”、“D”、“M”、“K”、“T”、“T”、“K”、“T”、“E”、“F”、“E”、“G”、“G”、“V”),G=c(3,1,3,3,1,1,2,3,2,2,2,1))
>df
N G
1 A 3
2 B 1
3 A 3
4 A 3
5d1
6米1
7K2
8T3
9T3
10 k2
11 T 3
12 E 2
13层1
14 E 2
15 G 2
16 G 2
17伏1
>numberOfGroups=长度(唯一(df$G))
>组数
[1] 3
>需要(plyr)
>唯一组唯一组
$`1`
N G
1 B 1
2 D 1
3米1
4f1
5伏1
$`2`
N G
1 k2
3 E 2
5 G 2
$`3`
N G
1 A 3
4T3
属性(,“拆分类型”)
[1] “数据帧”
属性(,“拆分标签”)
G
1 1
2 2
3 3
lapply(唯一组,函数(x)返回(长度(唯一(x$N)))
哦,将第三列作为组。使用第一列运行此脚本,您将获得所需的输出。可能有更好的方法,但是
x$gp <- paste(x$group, x$peoplename)
x_new <- merge (x, table(x$gp), by.x="gp", by.y="Var1")
x_new$gp <- NULL
最后两列使用ave
和中的是相同的:
within(x, Freq <- ave(1:nrow(x), peoplename, group, FUN=length))
in(x,Freq使用良好的旧base::aggregate
这有一个优点(在我看来)就是聚合数据,为每个组和该组中的peoplename
显示一行。length
给出了这种组合发生的次数:
aggregate( . ~ peoplename + group , data = x , FUN = length )
# peoplename group noofuniquepeople
#1 A 1 3
#2 B 1 1
#3 D 1 1
#4 K 2 2
#5 M 2 1
#6 T 2 3
#7 E 3 2
#8 F 3 1
#9 G 3 2
#10 V 3 1
顺便说一句,如果您输入的数据缺少noofuniquepeople
列(我认为这是因为您想要计算它),那么您就不需要它。您可以使用一个虚拟变量进行聚合,如下所示:
Unique = rep( 1 , nrow(x) )
aggregate( Unique ~ peoplename + group , data = x , FUN = sum )
请向我们展示您的尝试。这可能会有所帮助:这一个很容易记住,谢谢
Unique = rep( 1 , nrow(x) )
aggregate( Unique ~ peoplename + group , data = x , FUN = sum )