在同一数据帧内合并R中的数据 [英] Merging data in R within the same dataframe

查看:24
本文介绍了在同一数据帧内合并R中的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

希望这里有一个简单的解决方案。基本上,我有一个非常长的.csv,它包含由多个用户创建的数据,它由一个ID和两个对应于过程前后权重的变量组成。为了避免数据输入中的人为错误,并且由于ID的数据不是按顺序生成的,因此通常在.csv(创建的示例df)上这样输入数据:

id = c(rep(1:4,2),5:8)
pre = c(rep(10,4),rep(NA,4),rep(100,4))
post = c(rep(NA,4),rep(10,4),rep(100,4))
df = cbind(id,pre,post)

print(df)
      id pre post
 [1,]  1  10   NA
 [2,]  2  10   NA
 [3,]  3  10   NA
 [4,]  4  10   NA
 [5,]  1  NA   10
 [6,]  2  NA   10
 [7,]  3  NA   10
 [8,]  4  NA   10
 [9,]  5 100  100
[10,]  6 100  100
[11,]  7 100  100
[12,]  8 100  100

当我需要数据通过ID列将PRE和POST列合并在一起时-仅当它们尚未通过重合连接(就像ID8-12恰好输入在一起时)。这样看起来就像:

id_ = c(1:8)
pre_ = c(rep(10,4),rep(100,4))
post_ = c(rep(10,4),rep(100,4))
df_final = cbind(id_,pre_,post_)

print(df_final)
     id_ pre_ post_
[1,]   1   10    10
[2,]   2   10    10
[3,]   3   10    10
[4,]   4   10    10
[5,]   5  100   100
[6,]   6  100   100
[7,]   7  100   100
[8,]   8  100   100

我知道如果两组数据位于两个不同的DFS中,我可以使用dplyr中的JOIN_LEFT合并数据.不确定在这种情况下该怎么办,因为它们都在一个.csv中,并且并非每个ID都是未联接的。

谢谢。

推荐答案

您的问题不清楚,但从您的描述中听起来每个id都应该有前值和后值。如果该方法有效,则以下方法也将有效。

根据上面的r2evans注释,我假设您使用tidyverse是因为您的tidyverse标记。

library(tidyverse)

id = c(rep(1:4,2),5:8)
pre = c(rep(10,4),rep(NA,4),rep(100,4))
post = c(rep(NA,4),rep(10,4),rep(100,4))
df = cbind(id,pre,post)
df<- as.data.frame(df)


df %>% left_join(., df, by = "id") %>% select(id, pre.x, post.y) %>% drop_na()

  id pre.x post.y
1  1    10     10
2  2    10     10
3  3    10     10
4  4    10     10
5  5   100    100
6  6   100    100
7  7   100    100
8  8   100    100

这篇关于在同一数据帧内合并R中的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆