我在下面创建了一个数据框,表示家庭中的个人(hid
)。我给他们分配了一个社会等级(class
),从1到4编码。列relation
表示户主(编码为0)和伴侣(编码为1)。列cntry
代表不同的国家:英国、美国。did
列表示国家/地区年份:美国2008年、美国2009年、英国2008年、英国2009年。
我想创建一个新的专栏,以采取双方的最高社会阶层。我已经这样做了,但我在输出中仍然有一些问题。
主要问题:如果个人的家庭ID(hid
)缺少值,代码会自动为他们分配最高值。我想把这些人保留在数据框架中,同时也让他们保持原来的社会阶层。家庭ID号码3原始的class列被编码为3,但被分配为4,即使我们不知道家庭中其他人的社会阶级是什么,因为它缺失了。
有人能帮帮忙吗?
复制代码:
library(missForest)
library(dplyr)
library(tidyr)
# Set seed for reproducibility
set.seed(123)
# Create Variables
class <- sample(1:4, 10000, replace = TRUE)
hid <- rep(1:(10000/2), each = 2)
relation <- rep(0:1, 10000/2)
did <- rep(sample(2006:2009, 10000/2, replace = TRUE), each = 2)
cntry <- sample(c("US", "UK"), 10000, replace = TRUE)
# Combine into a data frame
df <- data.frame(class = class,
hid = hid,
relation = relation,
did = did,
cntry = cntry)
df <- prodNA(df, noNA = 0.1)
dominant_class_df <- df %>%
drop_na("class") %>%
filter(relation < 3) %>%
group_by(hid,did) %>%
summarise(dominant_class = max(class,na.rm=T)) %>%
mutate(dominant_class = if_else(is.infinite(dominant_class), NA_real_, dominant_class))
df2 <- df %>%
left_join(dominant_class_df, by = c("hid", "did"))
字符串
3条答案
按热度按时间dtcbnfnu1#
像这样的吗
字符串
创建于2023-07-27带有reprex v2.0.2
bweufnob2#
看起来
left_join()
可能会导致您的问题;如果你使用mutate()
而不是summarise()
,你会得到你期望的结果吗?例如:
字符串
创建于2023-07-26带有reprex v2.0.2
b09cbbtk3#
另一种方法:为
NA
提供新的HID-HID:字符串
...像以前一样创建
dominant_class_df
…结果:
型