R 我应该如何为该组的所有成员写入最大组号?

R 我应该如何为该组的所有成员写入最大组号?,r,R,我有这样一个数据帧: Id relationship age 1 1001 1 60 2 1001 2 50 3 1001 3 20 4 1002 1 70 5 1002 2 68 6 1002 3 23 7 1002 3 27 8 1002 3 27 9 1002

我有这样一个数据帧:

     Id relationship age
1  1001            1  60
2  1001            2  50
3  1001            3  20
4  1002            1  70
5  1002            2  68
6  1002            3  23
7  1002            3  27
8  1002            3  27
9  1002            3  23
10 1003            1  60
11 1003            2  40
12 1003            3  20
13 1003            3  20
我想在新列中为相同Id的所有成员编写每个Id的大年龄,并将其命名为maxage。 我需要这个结果:

     Id relationship age maxage
1  1001            1  60     60
2  1001            2  50     60
3  1001            3  20     60
4  1002            1  70     70
5  1002            2  68     70
6  1002            3  23     70
7  1002            3  27     70
8  1002            3  27     70
9  1002            3  23     70
10 1003            1  60     60
11 1003            2  40     60
12 1003            3  20     60
13 1003            3  20     60

如果您的数据帧是df,那么

result <- aggregate(age~Id, df, max)
df <- merge(df,result,by="Id")
colnames(df)[3:4] <- c("age","max.age")
df
#      Id relationship age max.age
# 1  1001            1  60      60
# 2  1001            2  50      60
# 3  1001            3  20      60
# 4  1002            1  70      70
# 5  1002            2  68      70
# 6  1002            3  23      70
# 7  1002            3  27      70
# 8  1002            3  27      70
# 9  1002            3  23      70
# 10 1003            1  60      60
# 11 1003            2  40      60
# 12 1003            3  20      60
# 13 1003            3  20      60

result另一个选项是

> library(plyr)
> 
> ddply(ages, .(Id), function(df) {df$max.age = max(df$age); df})
     Id relationship age max.age
1  1001            1  60      60
2  1001            2  50      60
3  1001            3  20      60
4  1002            1  70      70
5  1002            2  68      70
6  1002            3  23      70
7  1002            3  27      70
8  1002            3  27      70
9  1002            3  23      70
10 1003            1  60      60
11 1003            2  40      60
12 1003            3  20      60
13 1003            3  20      60

我需要在上面写的dataframe中的一个新列中写入这个max,但是这个命令将它写入一个新的dataframe中。看来不太好,是的。很抱歉查看我的编辑。我认为这个命令是个好主意,但它在我的系统中不能完全工作。我认为这有问题。它不会在新的专栏中写max.age!我该怎么办?请帮帮我。我的处境很糟糕,我几乎没有时间:(这项工作就像一个集合(a~b)它生成新的数据框并在其中写入max.age,但我需要在数据框上方写入max.age。另一个问题是,该命令非常慢,而且我的数据集非常大,我很乐意提供帮助。我不确定问题出在哪里……据我所知,您需要一个新的列,其中包含每个组的最大年龄。我上面的解决方案不需要是的。所以我不知道你还需要什么。你能更新你的原始问题,显示你的真实数据是什么样子吗?你可以只做dput(head(ages)),假设你的数据被称为“ages”。如果这只是一个“maxage”而不是“max.age”的问题作为列名,只需在我的代码中进行更改。当我使用此命令时,R表示:错误:无法分配大小为1.5 Gb的向量。此外:警告消息:1:in
[.data.frame
(x,c(m$xi,if(all.x)m$x.one),c(by.x,seq_len(ncx)[-by.x]),达到4076Mb的总分配:请参阅帮助(memory.size)2:in
[.data.frame
(x,c(m$xi,if(all.x)m$x.only),c(by.x,seq_len(ncx)[-by.x]):已达到4076Mb的总分配:请参阅帮助(memory.size)3:In
[.data.frame
(x,c(m$xi,if(all.x)m$x,if(all.x)m$x.only),c(by.x,seq_len(ncx)[-by.x]):已达到4076Mb的总分配:请参阅帮助(memory.size)代码在小数据上肯定可以正常工作。听起来您的内存不足。如果可能,请尝试启动一个新的R会话,或者听取@jlhoward的建议并使用
data.table
,以避免复制并加快速度。
> library(plyr)
> 
> ddply(ages, .(Id), function(df) {df$max.age = max(df$age); df})
     Id relationship age max.age
1  1001            1  60      60
2  1001            2  50      60
3  1001            3  20      60
4  1002            1  70      70
5  1002            2  68      70
6  1002            3  23      70
7  1002            3  27      70
8  1002            3  27      70
9  1002            3  23      70
10 1003            1  60      60
11 1003            2  40      60
12 1003            3  20      60
13 1003            3  20      60