如何在R循环中创建列
嗨,我正试图通过使用循环来简化我的代码。我尝试在多个数据帧中修改列名(fips到area_fips),稍后我将在列“area_fips”中添加前导0。我不知道为什么我的循环没有做任何事情。我的数据如下所示:如何在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 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)