【问题标题】:Replace Column Values of dataframe based List of Dataframes替换基于数据框的数据框列表的列值
【发布时间】:2020-08-25 14:32:49
【问题描述】:

dfs列表:

catbehave <- c("Good", "Cute", "Evil")
catnum <- c(1, 2, 3)
dogbehave <- c("Goodboi", "Cute")
dognum <- c(4, 2)
mousebehave <- c("Evil", "Good", "Cute")
mousenum <- c(3, 1, 2)

cat <- as.data.frame(cbind(catbehave, catnum))
dog <- as.data.frame(cbind(dogbehave, dognum))
mouse <- as.data.frame(cbind(mousebehave, mousenum))


list.1 <- list(cat = cat,dog = dog,mouse = mouse)

df1:

cat <- c("Good", "Evil", "Evil", "Cute")
dog <- c("Goodboi", "Goodboi", "Cute", "Goodboi")
mouse<- c("Evil", "Good", "Cute", "Evil")
df1 = data.frame(cat, dog, mouse)

我想评估一个 dfs 列表以更改 df1 中的值。 df1中的列需要使用list.1中的df的名称

输出:

df1

cat  dog  mouse
1    4    3
3    4    1
3    2    2
2    4    3

【问题讨论】:

    标签: r


    【解决方案1】:

    一个基本的R 选项,假设 list.1 和 df1 有一些顺序:

    df1[] <- mapply(
      function(x, y) x[y],
      lapply(list.1, function(x) setNames(x[[2]], x[[1]])),
      df1
    )
    df1
    
    #   cat dog mouse
    # 1   1   4     3
    # 2   3   4     1
    # 3   3   2     2
    # 4   2   4     3
    

    【讨论】:

      【解决方案2】:

      您可以使用match 进行更新加入

      for(i in names(df1)) {
         df1[,i] <- list.1[[i]][match(df1[,i], list.1[[i]][,1]), 2]
      }
      df1
      #  cat dog mouse
      #1   1   4     3
      #2   3   4     1
      #3   3   2     2
      #4   2   4     3
      

      【讨论】:

        【解决方案3】:

        使用tidyverse 我们可以做到这一点

        library(dplyr)
        library(tibble)
        library(purrr)
        map2_dfc(df1, list.1, ~ deframe(.y)[.x])
        # A tibble: 4 x 3
        #  cat   dog   mouse
        #  <chr> <chr> <chr>
        #1 1     4     3    
        #2 3     4     1    
        #3 3     2     2    
        #4 2     4     3    
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-02-11
          • 1970-01-01
          • 1970-01-01
          • 2014-11-12
          • 2018-01-01
          • 2018-09-29
          相关资源
          最近更新 更多