首页 > 解决方案 > 将第三列添加到数据框列表 R tidyverse

问题描述

我有一个数据框,其中最后一列(“数据”)由一个数据框列表组成,每个数据框都有一个“年份”和一个“产量”列。我想向列中的每个数据框添加第三列“Det_Yield”。我想知道如何以“tidyverse”的方式做到这一点。

在此处输入图像描述

我已经使用循环完成了它,就像这样,但我想知道如何使用 map 或其他一些整洁的方法来做到这一点。谢谢你。

   for (cty in 1:66){
       corn_by_county[[3]][[cty]]$Det_Yield <- NA
       yield_model <- lm(corn_by_county[[3]][[cty]]$Yield ~ corn_by_county[[3]][[cty]]$Year)
       corn_by_county[[3]][[cty]]$Det_Yield <- resid(yield_model)}

在此处输入图像描述

标签: rtidyverse

解决方案


您可以通过map以下方式使用。

library(dplyr)
library(purrr)

viewOutput <- df %>%
  mutate(data = map(data, ~ mutate(.x, det_yield = 'whatever')))

viewOutput$data

# [[1]]
# A tibble: 2 x 3
#    year yield det_yield
#   <dbl> <dbl> <chr>    
# 1  1999     5 whatever 
# 2  2000     6 whatever 

# [[2]]
# A tibble: 2 x 3
#    year yield det_yield
#   <dbl> <dbl> <chr>    
# 1  2001     7 whatever 
# 2  2002     8 whatever

任意演示数据

df <- structure(list(data = list(structure(list(year = c(1999, 2000
), yield = c(5, 6)), row.names = c(NA, -2L), class = c("tbl_df", 
"tbl", "data.frame")), structure(list(year = c(2001, 2002), yield = c(7, 
8)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
)))), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))

推荐阅读