gpt4 book ai didi

r - 更改数据帧结构(两个数据帧到一个)

转载 作者:行者123 更新时间:2023-12-02 07:17:40 25 4
gpt4 key购买 nike

我有两个数据帧(data1data2)。

data1 <- data.frame(id = c(1,2,3),
var1 = c("x", "x", "x"),
var2 = c("y", "y", "y") )

data2 <- data.frame(id = c(1,2,3,4,5,6,7,8),
data1Id = c(1,1,2,2,2,3,3,3),
var3 = c(0, 3, 5, 2, 5, 2, 9, 8),
var4 = c(1, 6, 3, 6, 2, 8, 7, 5))

对于 data1 中的每个条目,data2 中都有多个条目。两个表都通过变量 data1Id 链接在一起。我的目标是拥有一个单一的 data.frame。所以我想将 data2 的列添加到 data1 并为 data2 中的每个条目将列名称递增 1。

在上面的例子中

id    var1    var2    var3_1   var3_2   var3_3    var4_1   var4_2   var4_3
----------------------------------------------------------------------------
1 x y 0 3 NA 1 6 NA
2 x y 5 2 5 3 6 2
3 x y 2 9 8 8 7 5

谁能告诉我如何实现这个目标?

最佳答案

你必须 reshape 你的data2,然后加入到data1:

library(tidyverse)

data2 %>%
select(-id) %>%
group_by(data1Id) %>% # for each data1Id
mutate(indx = row_number()) %>% # create a row index (useful to reshape)
ungroup() %>%
gather(var, value, -data1Id, -indx) %>% # reshape dataset
unite(var, var, indx) %>% # combine those to columns to create new column names for reshaping
spread(var, value) %>% # reshape again
right_join(data1, by = c("data1Id" = "id")) %>% # join to data1
select(id = data1Id, var1, var2, everything()) # update column order

# # A tibble: 3 x 9
# id var1 var2 var3_1 var3_2 var3_3 var4_1 var4_2 var4_3
# <dbl> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 x y 0 3 NA 1 6 NA
# 2 2 x y 5 2 5 3 6 2
# 3 3 x y 2 9 8 8 7 5

关于r - 更改数据帧结构(两个数据帧到一个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56902287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com