根据最高值创建新列
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
函数来提取数据框中定义的一组列的最大值。在我们的例子中,这将检查 education
和 education_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
这是一个使用 rowwise
和 c_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
我希望我的措辞不会太令人困惑。我使用的数据集记录了受访者的婚姻和上学年限(学位)。我想创建一个与居住在家庭中的最高看护人等级相对应的衡量标准。
我的变量如下所示:
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
函数来提取数据框中定义的一组列的最大值。在我们的例子中,这将检查 education
和 education_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
这是一个使用 rowwise
和 c_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