如何在R循环中创建列

问题描述 投票:0回答:1

[嗨,我正在尝试通过使用循环来简化代码。我试图在多个数据帧中修改列名(将fips更改为area_fips),稍后我将在列“ area_fips”中添加前导0。我不知道为什么我的循环什么也没做。我的数据如下:

fips   state  county
1234   AL     xx county
2345   AL     xx county
...

这是我到目前为止所拥有的。

list_2014 = read.csv('C:/cfpb_list_2014.csv')
list_2015 = read.csv('C:/cfpb_list_2015.csv')
list_2016 = read.csv('C:/cfpb_list_2016.csv')
list_2017 = read.csv('C:/cfpb_list_2017.csv')
list_2018 = read.csv('C:/cfpb_list_2018.csv')
list_2019 = read.csv('C:/cfpb_list_2019.csv')

filelist = c('list_2014','list_2015','list_2016','list_2017','list_2018','list_2019')

for (i in filelist){
   d = get(i)
   names(d)[1] = 'area_fips'

   }

我试图在循环中使用i $ area_fips,但是没有用。

list_2014$area_FIPS = str_pad(list_2014$FIPS, 5, pad = "0")
list_2015$area_FIPS = str_pad(list_2015$FIPS, 5, pad = "0")
list_2016$area_FIPS = str_pad(list_2016$FIPS, 5, pad = "0")
list_2017$area_FIPS = str_pad(list_2017$FIPS, 5, pad = "0")
list_2018$area_FIPS = str_pad(list_2018$FIPS, 5, pad = "0")
list_2019$area_FIPS = str_pad(list_2019$FIPS, 5, pad = "0")

谢谢!

r loops
1个回答
2
投票

您可以使用mget来获得一个列表中的所有数据帧,更改第一列的列名并在其上应用str_pad。然后我们可以return更改的数据帧。

total_list <- lapply(mget(filelist), function(x) {
   names(x)[1] = 'area_fips'
   x[[1]] <- stringr::str_pad(x[[1]], 5, pad = "0")
   return(x)
})

如果您需要它们作为单独的数据帧,我们可以使用list2env

list2env(total_list, .GlobalEnv)
© www.soinside.com 2019 - 2024. All rights reserved.