【问题标题】:In R, split a column in 2 columns based on some condition在 R 中,根据某些条件将一列拆分为 2 列
【发布时间】:2017-07-01 06:09:24
【问题描述】:

我正在尝试根据百分比将数据框租用分成 2 列。

|集团 |百分比|

|0 被雇用 | 60% |

| 0 人下个月录用 | 65% |

| 0 或 1 人被雇用 | 68% |

| 0 或 1 人雇用 next_month | 70%|

|1 人被雇用 | 79%|

|1 或 2 名员工 | 80%|

|2 退休| 85%|

|2 或 3 人被解雇| 92%|

|3 未退休| 96%|

  • 我想要 2 列组和决策输出应该是(列百分比和决策应该是因为它没有变化,如果百分比在 60% 到 69%(第 3 行)之间,列组应该是 0,如果组应该是 1百分比在 70% 到 79% 之间(第 4 行),如果百分比在 80% 到 89% 之间,组应该是 2,如果百分比在 90% 到 99% 之间,组应该是 3)

|集团 |决定 |百分比


| 0 |受雇 | 60%

| 0 |下个月录用 | 65%

| 0 |受雇 | 68%

| 1 |下个月录用 | 70%

| 1 |受雇 | 79%

|2 |员工 | 80%|

|2 |退休| 85%|

|3 |解雇| 92%|

|3 |未退休| 96%|

我的代码: foo

谁能帮忙。提前致谢

【问题讨论】:

    标签: r split multiple-columns


    【解决方案1】:

    我们可以使用tidyverseextract(来自tidyr)将'group'拆分为'group'和'decision',然后replace'group'的值为1,如果'percentage'(从readr中提取出parse_number的数大于等于90。

    library(tidyverse)
    df1 %>%
        extract(group, into = c('group', 'decision'), "^(\\d+).*(hired.*)") %>% 
        mutate(group = replace(group, parse_number(percentage)>=90, 1))
    #    group         decision percentage
    #1     0            hired        80%
    #2     0 hired next_month        85%
    #3     0            hired        88%
    #4     1 hired next_month        90%
    #5     1            hired        99%
    

    数据

    df1 <- structure(list(group = c("0 hired", "0 hired next_month", "0 or 1 hired", 
    "0 or 1 hired next_month", "1 hired"), percentage = c("80%", 
    "85%", "88%", "90%", "99%")), .Names = c("group", "percentage"
    ), class = "data.frame", row.names = c(NA, -5L))
    

    【讨论】:

    • 非常感谢,但实际上数据有更多列,并且(已雇用。*)在这里不起作用。对不起,你能建议我别的吗?我正在编辑原始问题中的数据。
    • 我已针对新问题修改了您的代码,但我遇到了 parse_number 问题,您能帮忙吗? df1 %>% extract(group, into = c('group', 'decision'), "^(\\d+).*(hired|hired next_month|employee|retired|fired|not-retired)") %> % mutate(group = replace(group, parse_number(if((percentage)>=90) 1 else 0)))
    • 我已经进一步修改了它,但仍然没有得到想要的输出 - df2% extract(group, into = c('group', 'decision'), "^(\\d+ ).*(hired|hired next_month|employee|retired|fired|not-retired)")%>% mutate(group = replace(group, parse_number(percentage)>=90, 3))
    • @Jals 它是基于你的例子我创建的模式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-05-21
    • 2021-11-25
    • 1970-01-01
    相关资源
    最近更新 更多