聚合/连接相同 ID 行的字符值

Aggregating / Concatening character value of same IDs rows

我是一名 R 初学者,目前面临一个我暂时无法概念化的问题。 我看过几个相关的帖子,但除了那里没有找到具体的答案 :

但我的问题有点不同。

这是我想使用的初始 df 的结构:

sta_RHP_metho (3528,4) 变量是:
- "code.sandre" 是我要使用的 ID
- "CodeOpera" 唯一 ID 与 "code.sandre"
相关 - "Methode.de.peche" 一个字符向量
- "year"

在那个 df 中,行数与唯一行数一样多 "CodeOpera" (3528)。有几个"CodeOpera" by id/"code.sandre" 还有180个code.sandre

我想要得到的是一个 df,其中包含 "code.sandre" 的唯一行和每年的 "Methode.de.peche" 字符值。

我几乎通过处理以下代码得到了它:

x2<-melt(sta_RHP_metho,c("code.sandre","CodeOpera","year"),"Methode.de.peche")
x3<-as.data.frame(dcast(x2,code.sandre + CodeOpera ~ year))

但我仍然有几行与唯一 "CodeOpera" (3528) 一样多,正如我所说,我不知道如何通过 ID 获得唯一的 rox。
需要注意的是,每年可能有多个 "Methode.de.peche",因此在某些情况下我可能需要连接返回值。

希望我的解释清楚。

将不胜感激 ;)

干杯。

特里斯坦


谢谢@ANG。这是最小的可重现示例:

1/我在 melt/dcast 操作后得到的数据帧:

code_sandre<-c("A","A","A","B","B","C","D")
year1<-c("a",NA,"a","b",NA,"c","b") 
year2<-c("a","b",NA,"b","b","c","b") 
year3<-c("a","b",NA,NA,NA,"c","b")
x<-data.frame(v1 =code.sandre,v2 =year1,v3 =year2, v4 =year3))

2/我想要得到的数据框:

code_sandre<-c("A","B","C","D")
year1<-c("a","b",NA,"b")
year2<-c("a,b","b","c","b")
year3<-c("a,b",NA,"c","b")
result<-data.frame(code_sandre,year1,year2,year3)

我不知道我是否理解你的意思,但看起来你只是想要独一无二的 code.sandre 而不管 CodeOpera 的值。尝试后是否得到预期结果(使用 melt() 前检查结果):

library(data.table)
setDT(sta_RHP_metho)
# delete column "CodeOpera"
sta_RHP_metho <- sta_RHP_metho[, CodeOpera := NULL]
# take unique rows
library(dplyr)
sta_RHP_metho2 <- distinct(sta_RHP_metho)

我能够实现什么。

code_sandre<-c("A","A","A","B","B","C","D")
year1<-c("a",NA,"a","b",NA,"c","b") 
year2<-c("a","b",NA,"b","b","c","b") 
year3<-c("a","b",NA,NA,NA,"c","b")
x<-data.frame(code_sandre =code_sandre,
              year1 = year1,
              year2 = year2,
              year3 = year3)
library(dplyr)
x2 <- x %>%
        group_by(code_sandre) %>%
        summarise_at(.vars = vars(year1, year2, year3),
                     .funs = function(x) toString(unique(x[!is.na(x)])))
x2
x3 <- as.data.frame(x2)
x3[x3 == ""] <- NA
x3

我认为它应该非常接近您的预期输出。