【问题标题】:Merging a long dataset with a wide dataset将长数据集与宽数据集合并
【发布时间】:2020-04-11 02:53:49
【问题描述】:

我目前有两个数据集。第一个是长格式:

animal      name
dog         jim
dog         jake
dog         ian
cat         luke
cat         james

等等

第二个是像这样的宽数据集:

dog      cat
adam     dennis
boris    NA
clive    NA

我想将我的所有数据从第一个数据集中移动到相应列下的第二个数据集中,所以理想情况下我会得到:

 dog      cat
adam     dennis
boris    luke
clive    james
jim      NA
jake     NA
Ian      NA

但是,我正在为如何做到这一点而苦苦挣扎。我已经尝试融化广泛的数据集,但是在重铸它时它不会返回正确的结果。

为帮助干杯

【问题讨论】:

  • 这里明显的答案是转换为 long 并合并。但是,您有重复的条目,这将使合并时变得非常困难
  • 你怎么知道 boris 应该和 luke 而不是 james 相匹配?
  • 抱歉,预期结果为宽格式。所以所有狗的名字都是一列,猫是另一列。而我有长格式的原始结果(第一个表)。
  • 这两个表是如何相互关联的?如果你想加入他们,你加入的是什么?还是你基本上只是绑定它们?
  • 你可以看看我的回答,看看是否是所需的输出

标签: r merge dataset


【解决方案1】:

这是base R 的解决方案。也许这就是你想要的

df2 <- rbind(df2,sapply(names(df2),function(v) ifelse(df1$animal==v,
                                                      df1$name[df1$animal==v],
                                                      NA)))
dfout <- data.frame(lapply(r <- Map(na.omit,df2), `length<-`,max(lengths(r))))

这样

> dfout
    dog    cat
1  adam dennis
2 boris  james
3 clive   luke
4   jim   <NA>
5  jake   <NA>
6   ian   <NA>

数据

df1 <- structure(list(animal = c("dog", "dog", "dog", "cat", "cat"), 
    name = c("jim", "jake", "ian", "luke", "james")), class = "data.frame", row.names = c(NA, 
-5L))

df2 <- structure(list(dog = c("adam", "boris", "clive", "jim", "jake", 
"ian", NA, NA), cat = c("dennis", NA, NA, NA, NA, NA, "james", 
"luke")), row.names = c(NA, -8L), class = "data.frame")

【讨论】:

  • 这太近了!除了似乎并非所有来自 df1 的值都被合并到 df2 中,尽管那些被合并到右列!
  • @Elsybelsy,df1 中的所有名称都已合并到 df2,没有任何遗漏...它看起来与您在帖子中所需的输出相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2020-08-11
  • 2023-01-07
  • 2021-02-14
  • 2019-07-23
相关资源
最近更新 更多