Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何计算每个组中唯一名称的#_R_Sorting_Unique_Repeat - Fatal编程技术网

R 如何计算每个组中唯一名称的#

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

有人能告诉我如何在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 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 )