【问题标题】:Is there a r function to fill factor value based on another factor value是否有 r 函数可以根据另一个因子值填充因子值
【发布时间】:2020-08-20 13:16:57
【问题描述】:

需要输出:(Unit_New基于Unit和ID)

> x
       CD   ID   Unit  Unit_New
1       1   222   EM       EM
2       2   222   EM       EM
3       3   555  NAM      NAM
4       4   555  NAM      NAM
5       5   555   GT      NAM
6       6   777   GT       EM
7       7   777   EM       EM
8       8   999   EM       EM
9       9   999   AO       EM
10     10   111   AO       AO

【问题讨论】:

  • 按 (ID) 分组并从 Unit 中填充所有 Unit_New 一个值
  • 使用 Unit_List = c("EM", "NAM", "AO")

标签: r for-loop time factors


【解决方案1】:

我们可以利用'Unit_List'创建一个factor和levels基于list,然后在删除未使用的levels后选择firstlevel,按'ID分组'

library(dplyr)
Unit_List = c("EM", "NAM", "AO")
x %>% 
    group_by(ID) %>% 
    mutate(Unit_New1 = levels(droplevels(factor(Unit, levels = Unit_List)))[1])
# A tibble: 10 x 5
# Groups:   ID [5]
#      CD    ID Unit  Unit_New Unit_New1
#   <int> <int> <chr> <chr>    <chr>    
# 1     1   222 EM    EM       EM       
# 2     2   222 EM    EM       EM       
# 3     3   555 NAM   NAM      NAM      
# 4     4   555 NAM   NAM      NAM      
# 5     5   555 GT    NAM      NAM      
# 6     6   777 GT    EM       EM       
# 7     7   777 EM    EM       EM       
# 8     8   999 EM    EM       EM       
# 9     9   999 AO    EM       EM       
#10    10   111 AO    AO       AO     

数据

x <- structure(list(CD = 1:10, ID = c(222L, 222L, 555L, 555L, 555L, 
777L, 777L, 999L, 999L, 111L), Unit = c("EM", "EM", "NAM", "NAM", 
"GT", "GT", "EM", "EM", "AO", "AO"), Unit_New = c("EM", "EM", 
"NAM", "NAM", "NAM", "EM", "EM", "EM", "EM", "AO")), 
class = "data.frame", row.names = c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10"))

【讨论】:

    猜你喜欢
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多