gpt4 book ai didi

R:将一个数据框中的行数据按组转换为另一个数据框中的列数据

转载 作者:行者123 更新时间:2023-12-05 04:35:06 25 4
gpt4 key购买 nike

我有以下格式的数据:

<表类="s-表"><头>身份证年龄性别<正文>129M232F318F489M545M

和;

<表类="s-表"><头>身份证子ID类型状态年<正文>13汽车是111丰田空2011123起亚空200925汽车N32汽车是34本田空201937法币空200638三菱空202041汽车N57汽车是

第二个表中的每个 ID 都有一行指定他们是否有汽车,另外还有一行说明他们拥有的汽车品牌。每个人最多拥有3辆车。我想将这些数据简化到一个表中。

<表类="s-表"><头>身份证年龄性别汽车?Car.1Car1.yearCar.2Car2.yearCar.3Car3.year<正文>129M是丰田2011起亚2009空空232FN空空空空空空318F是本田2019法币2006三菱2020489MN空空空空空空545M是空空空空空空

我已经尝试将 dplyr 中的 mutate 函数与 case_when 函数一起使用,但我无法检查另一个数据帧中的条件。如果我尝试将表连接在一起,我会为每个 ID 设置多行,这是我想避免的。第二张表的非标准设置使事情变得复杂。我唯一剩下的想法是切换到 Python/Pandas 并创建一个 for 循环,慢慢循环遍历每个 ID,如果此人有汽车和汽车品牌,则搜索第二个数据框,然后改变第一个数据框中的列。但考虑到我的数据集的大小,这将是低效的并且需要很长时间。

执行此操作的最佳方法是什么?

最佳答案

你可以试试下面的代码:

library(tidyverse)

df1

# A tibble: 5 x 3
ID Age Sex
<dbl> <dbl> <chr>
1 1 29 M
2 2 32 F
3 3 18 F
4 4 89 M
5 5 45 M

df2

# A tibble: 10 x 5
ID subID Type Status Year
<dbl> <dbl> <chr> <chr> <dbl>
1 1 3 Car Y NA
2 1 11 Toyota Y 2011
3 1 23 Kia Y 2009
4 2 5 Car N NA
5 3 2 Car Y NA
6 3 4 Honda Y 2019
7 3 7 Fiat Y 2006
8 3 8 Mitsubishi Y 2020
9 4 1 Clothed N NA
10 5 7 Clothed Y NA


df2 <- df2 %>% mutate(Status = if_else(Status == "NULL", "Y", Status))
df3 <- df2 %>% filter(!is.na(Year)) %>% group_by(ID) %>% mutate(index = row_number())
df4 <- df3 %>% pivot_wider(id_cols = c(ID), values_from = c(Type, Year), names_from = index )

因此将产生您想要的输出:

df1 %>% left_join(df2 %>% select(ID, Status) %>% distinct()) %>% left_join(df4) 

# A tibble: 5 x 10
ID Age Sex Status Type_1 Type_2 Type_3 Year_1 Year_2 Year_3
<dbl> <dbl> <chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
1 1 29 M Y Toyota Kia NA 2011 2009 NA
2 2 32 F N NA NA NA NA NA NA
3 3 18 F Y Honda Fiat Mitsubishi 2019 2006 2020
4 4 89 M N NA NA NA NA NA NA
5 5 45 M Y NA NA NA NA NA NA

关于R:将一个数据框中的行数据按组转换为另一个数据框中的列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71100301/

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