均化面板数据集中R中的分组值

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

我有一个家庭小组调查数据集。它包含两项调查:一项针对个人,一项针对家庭。每个家庭中的一个人都回答,而家庭中的所有其他人都只回答个人调查。市政地点仅在填充住所的人中。数据集是一个面板,因此对于每个不同的研究波,每个观察都存在多次。所以基本上我有这样的东西:

  df <- data.frame(id = c (11,11, 12,12,13, 13,14, 14,21, 21,22, 22,31, 31,32, 32,33, 33,34, 34,41, 41,42, 42,43, 43,44, 44,51, 51,61, 61,62, 62))
df$idhousehold <- c(1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4, 5,5, 6, 6, 6,6)
df$municipality <- c(NA, NA, NA,NA, NA, NA,"A","A",NA, NA, "A" "A",NA, NA,NA, NA, "B" "B", NA,NA, "A", "A",NA,NA,NA,NA,NA,NA, "C", "C","B","B",NA, NA)
df$year <- c(1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2)
df

我基本上要做的是为同一家庭中的每个人分配相同的市政价值。在上面的示例中,这意味着家庭1、2和4的每个人的市值均为“ A”,对于家庭3和6的每个人的5均具有B和C。我无法手动执行此操作,因为该数据集具有大约13万个观测值。

我尝试了多种方式处理数据和突变新变量,但我无法获得想要的东西。

感谢您的帮助!

r group-by dplyr mutate panel-data
2个回答
1
投票

由于每个家庭只有一个值,因此您可以这样做:

df$municipality <- ave(df$municipality, df$idhousehold, FUN = na.omit)

但是,由于数据中似乎缺少值,并且每个家庭可以有多个市政值,您可以这样做:

df$municipality <- ave(df$municipality, df$idhousehold, FUN = function(x) unique(na.omit(x))[1])

df
   id idhousehold municipality
1  11           1            A
2  12           1            A
3  13           1            A
4  14           1            A
5  21           2            A
6  22           2            A
7  31           3            B
8  32           3            B
9  33           3            B
10 34           3            B
11 41           4            A
12 42           4            A
13 43           4            A
14 44           4            A
15 51           5            C
16 61           6            B
17 62           6            B

dplyr等效:

df %>%
  group_by(idhousehold) %>%
  mutate(municipality = unique(na.omit(municipality))[1])

0
投票
df <- df %>% mutate(municipality=case_when(idhousehold %in% c(1,2,4)~ "A",idhousehold %in% c(3,6) ~ "B",idhousehold %in% 5 ~"C"))
© www.soinside.com 2019 - 2024. All rights reserved.