根据最高值创建新列

creating new column based on highest values

我希望我的措辞不会太令人困惑。我使用的数据集记录了受访者的婚姻和上学年限(学位)。我想创建一个与居住在家庭中的最高看护人等级相对应的衡量标准。

我的变量如下所示:

0 = 单身,未婚

1 或 2 = 家中的伴侣,使用母亲最高学历或伴侣最高学历之间的更高学历

3:7 = 单亲家庭,因此使用母亲最高学历

# sample dataframe
household <- data.frame(
  ID = c(1, 2, 3, 4),
  marital = c(1, 4, 0, 2),
  education = c(14, 18, 10, 12),
  education_partner = c(18, NA, NA, 14)
)

我希望在我的数据框末尾创建一个新列,用于表示居住在家中的最高级别的护理人员

预期输出:

ID    marital    education    education_partner    highest_degree     
1        1          14              18                  18     
2        4          18              NA                  18
3        0          10              NA                  10
4        2          12              14                  14

如果是单亲家庭,我尝试编写此代码来打印母亲教育程度,但如果是双亲家庭(婚姻 = 1 或2).而且我什至不确定 if, then 语句是否最能帮助我。我是 R 的新手,非常感谢您的帮助——提前致谢!

if(household$marital =  0 | 3:7 )
  highest_degree<- (household$education)

您可以使用 baseR 中的 pmax 函数来提取数据框中定义的一组列的最大值。在我们的例子中,这将检查 educationeducation_partner 字段。

new_data <- data %>%
  mutate(highest_degree = pmax(education, education_partner, na.rm = TRUE))

输出:

  ID marital education education_partner highest_degree
1  1       1        14                18             18
2  2       4        18                NA             18
3  3       0        10                NA             10
4  4       2        12                14             14

这是一个使用 rowwisec_across 的版本:

library(dplyr)
household %>% 
  rowwise() %>% 
  mutate(highest_degree = max(c_across(starts_with("education")), na.rm = TRUE)) 
     ID marital education education_partner highest_degree
  <dbl>   <dbl>     <dbl>             <dbl>          <dbl>
1     1       1        14                18             18
2     2       4        18                NA             18
3     3       0        10                NA             10
4     4       2        12                14             14

据我了解,您想检查婚姻状况是0还是3到7。如果是,请使用教育作为最高学历。如果不是,请选择教育程度和 education_partner?

之间的最大值

您需要对每一行执行此操作,因此您可以使用 dplyr 和 rowwise。然后使用 mutate 创建一个执行该条件语句的新变量。

library(dplyr)
  household %>% 
    rowwise() %>% # by row
    mutate(highest_degree = if(marital ==  0 | (marital >= 3 & marital <= 7 )){
  education } else {
    max(education_partner, education)
  }
) %>%
   ungroup()

给予

# A tibble: 4 x 5
     ID marital education education_partner highest_degree
  <dbl>   <dbl>     <dbl>             <dbl>          <dbl>
1     1       1        14                18             18
2     2       4        18                NA             18
3     3       0        10                NA             10
4     4       2        12                14             14