【问题标题】:Create a new variable from existing variable in dataframe using condition使用条件从数据框中的现有变量创建一个新变量
【发布时间】:2016-09-08 15:52:52
【问题描述】:

我有一个大数据框,如下例所示。

          df <- data.frame(IND= seq(1:20), S = LETTERS[1:20], FA=c(0,0,133,0,2,2,2,0,0,4,4,4,6,6,0,0,0,4,2,8),
 MO = c(77,0,77,1,3,1,1,1,0,3,1,5,5,3,0,0,100,3,5,5)
 )

当 FA 和 MO 等于 IND 时,我需要创建两个新变量(SFA 和 SMO)。我需要下面的输出

                   out<- df <- data.frame(IND= seq(1:20), 
                   S = LETTERS[1:20], 
                   FA=c(0,0,133,0,2,2,2,0,0,4,4,4,6,6,0,0,0,4,2,8), 
                   MO = c(77,0,77,1,3,1,1,1,0,3,1,5,5,3,0,0,100,3,5,5), 
                               SFA=c(0,0,133,0,"B","B","B",0,0,"D","D","D","F","F",0,0,0,"D","B","H"),
 SMO=c(77,0,77,"A","C","A","A","A",0,"C","A","E","E","C",0,0,100,"C","E","E"))

我尝试匹配变量并合并后,但效果不佳。

谢谢

【问题讨论】:

    标签: r merge match


    【解决方案1】:

    要从S 中获取相应的值,其中FA(MO) == IND,您可以使用match 函数从S 中找出索引和子集作为S[match(FA, IND)]( S[match(MO, IND)]),然后使用 coalesce 函数将匹配结果中的 NAs 填充为原始向量中的值:

    library(dplyr)
    df %>% mutate(SFA = coalesce(as.character(S[match(FA, IND)]), as.character(FA)), 
                  SMO = coalesce(as.character(S[match(MO, IND)]), as.character(MO)))
    
    #   IND S  FA  MO SFA SMO
    #1    1 A   0  77   0  77
    #2    2 B   0   0   0   0
    #3    3 C 133  77 133  77
    #4    4 D   0   1   0   A
    #5    5 E   2   3   B   C
    #6    6 F   2   1   B   A
    #7    7 G   2   1   B   A
    #8    8 H   0   1   0   A
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 2015-05-07
      相关资源
      最近更新 更多