【问题标题】:Aggregating / Concatening character value of same IDs rows聚合/连接相同 ID 行的字符值
【发布时间】:2017-10-21 17:18:12
【问题描述】:

我是 R 初学者,目前面临一个我暂时无法概念化的问题。 我看过几个相关的帖子,但除了那里没有找到具体的答案 :
Aggregating rows with same Ids and retaining only unique entries in R

但我的问题有点不同。

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

sta_RHP_metho (3528,4) 变量是:
- “code.sandre”女巫是我将使用的 ID
- "CodeOpera" 一个独特的 id 女巫与 "code.sandre" 相关
- “Methode.de.peche”一个字符向量
- “年”

在该 df 中,行数与唯一的 "CodeOpera" (3528) 一样多。 id/“code.sandre”有几个“CodeOpera”,code.sandre有180个

我想要得到的是一个具有唯一行的 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)

【问题讨论】:

标签: r dataframe data-manipulation


【解决方案1】:

我不知道我说得对不对,但无论CodeOpera 的值如何,您似乎都只想要唯一的code.sandre。尝试这个后是否得到了预期的结果(使用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

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

【讨论】:

  • 试试这个看看sta_RHP_metho2 &lt;- as.data.frame(sta_RHP_metho2)然后用melt()
  • 这几乎是我想要的,但我无法从你的sta_RHP_metho2 &lt;- distinct(sta_RHP_metho) 中融化,这不是我想要的输出数据帧结构。实际上,我希望在我的初始数据框中观察到每个 "code.sandre" 的唯一行和 "year" 的唯一列。对于行和列之间的每个连接点,有 3 个可能性:没有值(因为那一年没有采样)、1 个值(因为 1 个唯一的 "Methode.de.peche",即使那一年有几个 "CodeOpera")、几个值(几个 "Methode.de.peche" )。也许数据框不适合我的情况?矩阵?
  • 对不起我乱七八糟的 cmets 我会改进我的语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
相关资源
最近更新 更多