代码之家  ›  专栏  ›  技术社区  ›  LLL

将基于共享根的类似var名称粘贴到另一个var中

  •  2
  • LLL  · 技术社区  · 8 年前

    如果第一个数据帧中相同名称的var(df2$varconsistsof)的根名称存在于第二个数据帧中的var(df2$var)中,我想将在一个数据帧(df1)中找到的类似var名称粘贴到另一个数据帧中的var(df2$var)中。

    谢谢你的帮助!

    # Starting point 
    df1 <- data.frame(abc_book_E1_C1=c(1:5),abc_book_E1_C2=c(1:5),abc_book_E1_C3=c(1:5),def_book_E1_C1=c(1:5),abc_toy_E1_R1=c(1:5),abc_toy_E1_R2=c(1:5)) 
    df2 <- data.frame(var=c("abc_book","abc_toy"),varconsistsof=c(NA,NA))
    
    # Goal
    dfgoal <- data.frame(var=c("abc_book","abc_toy"),varconsistsof=c("abc_book_E1_C1,abc_book_E1_C2,abc_book_E1_C3","abc_toy_E1_R1,abc_toy_E1_R2"))
    
    # Attempts
    df2$varorigin <- grep(df2$var,names(df),value=TRUE) 
    df2$varorigin <-  apply(df1, 1, function(df2$var) grep(df2$var,names(df),value=TRUE))
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   Florian    8 年前

    你可以试试:

    df2$varconsistsof = lapply(df2$var, function(x){colnames(df1)[grepl(x,colnames(df1))]})
    

    输出:

           var                                  varconsistsof
    1 abc_book abc_book_E1_C1, abc_book_E1_C2, abc_book_E1_C3
    2  abc_toy                   abc_toy_E1_R1, abc_toy_E1_R2
    

    注意现在 str(df2) 收益率

    'data.frame':   2 obs. of  2 variables:
     $ var          : Factor w/ 2 levels "abc_book","abc_toy": 1 2
     $ varconsistsof:List of 2
      ..$ : chr  "abc_book_E1_C1" "abc_book_E1_C2" "abc_book_E1_C3"
      ..$ : chr  "abc_toy_E1_R1" "abc_toy_E1_R2"
    

    为了使第二列成为简单的字符串,可以使用 sapply 并将语句包装在 paste 带参数 collapse=', 因此:

    df2$varconsistsof = sapply(df2$var, function(x){
                paste(colnames(df1)[grepl(x,colnames(df1))],collapse=',')})
    

    现在 STR(DF2) 收益率

    'data.frame':   2 obs. of  2 variables:
     $ var          : Factor w/ 2 levels "abc_book","abc_toy": 1 2
     $ varconsistsof: chr  "abc_book_E1_C1,abc_book_E1_C2,abc_book_E1_C3" "abc_toy_E1_R1,abc_toy_E1_R2"
    

    希望这有帮助!