聚合/连接相同 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
我认为它应该非常接近您的预期输出。
我是一名 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
我认为它应该非常接近您的预期输出。