R 使用pivot_转换多行

R 使用pivot_转换多行,r,tidyr,R,Tidyr,我的真实数据集更大,但我试图在这里缩短它。 #我所拥有的: Income_100m_total_df <- data.frame(Name = c("Amstelpark", "Amstelpark", "Amstelpark",

我的真实数据集更大,但我试图在这里缩短它。 #我所拥有的:

Income_100m_total_df <- data.frame(Name = c("Amstelpark", 
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark",
                                        "Amstelpark"),
            Income_type_households = c("Mean_low_income_households",
                             "Mean_low_income_households", 
                             "Mean_low_income_households",
                             "Mean_middle_income_households",
                             "Mean_middle_income_households",
                             "Mean_middle_income_households",
                             "Mean_high_income_households",
                             "Mean_high_income_households",
                             "Mean_high_incom_households"),
             Income_households = c(42.333, 42.333, 42.333, 32, 32, 32, 
                                   25.667, 25.667, 25.667),
             Income_type_persons = c("Mean_low_income_persons",
                                     "Mean_middle_income_persons", 
                                     "Mean_high_income_persons",
                                     "Mean_low_income_persons",
                                     "Mean_middle_income_persons",
                                     "Mean_high_income_persons",
                                     "Mean_low_income_persons",
                                     "Mean_middle_income_persons",
                                     "Mean_high_income_persons"),
            Income_households = c(33, 32, 35, 33, 32, 35, 33, 32, 35))

然而,它似乎只适用于个人而不适用于家庭,我如何做到这一点?

除了[9,2](“平均高收入家庭”)中的打字错误之外,这应该是有效的:

cbind( unique(Income_100m_total_df[,1:3]), unique(Income_100m_total_df[,4:5]) )

#        Name        Income_type_households Income_households
#1 Amstelpark    Mean_low_income_households            42.333
#4 Amstelpark Mean_middle_income_households            32.000
#7 Amstelpark   Mean_high_income_households            25.667
#         Income_type_persons Income_households.1
#1    Mean_low_income_persons                  33
#4 Mean_middle_income_persons                  32
#7   Mean_high_income_persons                  35

我找到了一种代码的变通方法,它满足了我的需求:

inc_house <- Income_100m_total_df %>% 
group_by(Income_type_households) %>% 
  summarize(mean = mean(Income_households))

inc_person <- Income_100m_total_df %>% 
group_by(Income_type_persons) %>% 
  summarize(mean = mean(Income_households.1))

inc_both <- bind_cols(inc_house, inc_person)
inc_house%
按(收入类型家庭)分组%>%
汇总(平均值=平均值(家庭收入))
股份有限公司人员%
按(收入类型人员)分组%>%
汇总(平均值=平均值(家庭收入1))

inc_Hi,从您提供的示例判断,您并不是在查看表,而只是查看原始数据的子集。在您的示例中,所需的结果只是原始数据的第1、5和9行。你可以使用
slice
来实现这一点。你能更清楚地解释一下从第一个到第二个的过程吗?嗨,卡米尔,在第一个表中有很多迭代,所以我想去掉它们。通过添加两个新列,其中名称和值是分开的,我希望只得到一个没有迭代的表(因此每个公园,在本例中是AmsterPark),我只得到三行,表示家庭和个人的中低收入和高收入。我原以为pivot_会完成这项工作,但它似乎只适用于人,而不是在hoouseholds。谢谢Andre!你能帮我在我的代码中实现这个吗?阅读excel(“公园、缓冲区、重叠区、空间、连接区”xlsx)%>%pivot\u更长(c(平均低收入家庭、平均中等收入家庭、平均高收入家庭),姓名至=“收入类型家庭”,值至=“收入家庭”)%%>%pivot\u更长(c(平均低收入者、平均中等收入者、平均高收入者)、姓名至=“收入类型”者、值至=“收入者”)如果您将读取的输出保存到“收入总额1亿欧元”,则应该有效(Income_100m_total_df Hi Andre,我试过了,这是wat r给我的:数据错误。frame(…,check.names=FALSE):参数意味着不同的行数:6059似乎您的行中有一行不同。您的行中是否仍然有拼写错误?您可以通过先运行unique(Income_100m_total_df[,1:3]),然后运行unique(Income_total_df)来测试这一点[,4:5]),看看为什么行数不匹配。如果我不纠正您发布的示例中的错误,我会得到相同的错误:error in data.frame(…,check.names=FALSE):参数意味着行数不同:4,3您必须将“平均高收入家庭”更改为“平均高收入家庭”
cbind( unique(Income_100m_total_df[,1:3]), unique(Income_100m_total_df[,4:5]) )

#        Name        Income_type_households Income_households
#1 Amstelpark    Mean_low_income_households            42.333
#4 Amstelpark Mean_middle_income_households            32.000
#7 Amstelpark   Mean_high_income_households            25.667
#         Income_type_persons Income_households.1
#1    Mean_low_income_persons                  33
#4 Mean_middle_income_persons                  32
#7   Mean_high_income_persons                  35
inc_house <- Income_100m_total_df %>% 
group_by(Income_type_households) %>% 
  summarize(mean = mean(Income_households))

inc_person <- Income_100m_total_df %>% 
group_by(Income_type_persons) %>% 
  summarize(mean = mean(Income_households.1))

inc_both <- bind_cols(inc_house, inc_person)