根据另一个df匹配条件中一列的总和来变异一个df

问题描述 投票:0回答:1

我有

df1
看起来像这样:

状态 邮政编码 类型
数控 00001
数控 00001 财产
数控 00000
数控 00001 财产

我想创建

df2
,其中每个邮政编码都是一个观察值,列计算每个“类型”在每个邮政编码中出现的次数
df1

邮政编码 财产
00000 250 45
00001 115 150

到目前为止,我创建了

df2
,它是所有唯一邮政编码的列表,并尝试了以下方法,这导致添加了“人”列,但每个值都是相同的数字,是每一行的总和,其中“ person”出现在
df1
的整个数据集中。

df2 <- mutate(df2, person = sum(df1$type == "person"))

最终目标是使用 for 循环为每个“类型”创建多个附加列。我尝试了前面的方法以及下面的方法:

for(i in nrow(df2)){
df2 <- mutate(df2, person = sum(df1[i,"type"] == "person"))
}

但是现在,我为每一行添加了零的列。

我这样做的方式正确吗?我该如何解决这个问题?

r mutate
1个回答
0
投票

您可以使用

dplyr::count
后跟
tidy::pivot_wider
:

library(dplyr)
library(tidyr)

df %>% 
  group_by(zip_code, type) %>%
  count() %>%
  pivot_wider(names_from = type, values_from = n)

输出:

  zip_code person property
     <int>  <int>    <int>
1    12345      1        2
2    54321      1       NA

数据(注意我更改了您的邮政编码只是为了便于识别)

df <- read.table(text = "state  zip_code    type
NC  12345   person
NC  12345   property
NC  54321   person
NC  12345   property", h = TRUE)
© www.soinside.com 2019 - 2024. All rights reserved.