我是R初学者,目前面临一个我现在无法概念化的问题。
我看了几个相关的帖子,但除了那里没有找到具体的答案
:
Aggregating rows with same Ids and retaining only unique entries in R
但我的问题有点不同。
这是我想要使用的初始df的结构:
sta_RHP_metho(3528,4)变量是:
- “code.sandre”女巫是我将使用的身份证
- “CodeOpera”一个独特的id巫婆与“code.sandre”相关
- “Methode.de.peche”字符向量
- “年”
在那个df中,行数和唯一的“CodeOpera”(3528)一样多。 id /“code.sandre”有几个“CodeOpera”,有180个code.sandre
我想得到的是一个带有“code.sandre”唯一行的df和每年的“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 /我在融化/播放操作后得到的数据帧:
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)
答案 0 :(得分:0)
我不知道我是否帮助您,但无论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)
OR
我能够实现的目标。
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
我认为它应该非常接近你的预期输出。