Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R循环中创建列_R_Loops - Fatal编程技术网

如何在R循环中创建列

如何在R循环中创建列,r,loops,R,Loops,嗨,我正试图通过使用循环来简化我的代码。我尝试在多个数据帧中修改列名(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 = r

嗨,我正试图通过使用循环来简化我的代码。我尝试在多个数据帧中修改列名(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")

谢谢

您可以使用
mget
获取一个列表中的所有数据帧,更改第一列的列名并在其上应用
stru pad
。然后,我们可以
返回更改后的数据帧

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

您正在重命名数据的副本,
d
,而不是原始数据。您需要将原始对象替换为更新的对象,因此将
assign(i,d)
添加到
for
循环中应该可以在
获取数据并将其存储到
d
后,更新
d
*中的第一列名称,但决不将其存储回
i
指向的变量中。虽然我确实不喜欢
get
/
assign
方法(更喜欢Ronak使用
lappy
),但您需要在循环中使用
assign(I,d)
,将更新后的值放回原始帧中。但同样,由于许多原因,这种方法是不明智的。您可以改进您的文件读取方法<代码>文件列表
list2env(total_list, .GlobalEnv)