在同一数据帧内合并R中的数据 [英] Merging data in R within the same dataframe
本文介绍了在同一数据帧内合并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屋!
查看全文