R在数据框上循环以创建新的数据框 [英] R loop over dataframe to create new dataframes

查看:48
本文介绍了R在数据框上循环以创建新的数据框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有几个数据帧

dfx01=data.frame(city=c("a","b","c","d"),yr=c(2000,2001,2003,2002))
dfx02=data.frame(city=c("a","e","c","d"),yr=c(2000,2001,2005,2002))
dfx012=data.frame(city=c("f","b","c","d"),yr=c(2000,2000,2001,2002))
dfx022=data.frame(city=c("f","b","c","g"),yr=c(2002,2000,2003,2001))

我应该如何输出仅包含yr = 2001的数据帧x01,x02,x012,x022?

how should i output corresponding data frames x01,x02,x012,x022 that subsets only yr=2001?

我尝试过尝试

dflist=list(dfx01,dfx02,dfx012,dfx022)
lapply(dflist, fun(x){subset(x,startyr=2000)})

但是如何命名4个新数据框x01,x02,x012,x022?谢谢.

But how to name 4 new data frame x01,x02,x012,x022? thanks.

推荐答案

您的通话只需稍作更改即可.试试

Your call just needs to be changed a little. Try

lapply(dflist, subset, yr == 2000)

但是我更喜欢 [子设置,因为 subset 可能会有意想不到的结果.这是这样做的方法,并同时添加新名称.要设置与数据框名称相似的名称,最好首先将名称添加到列表中.

But I prefer [ subsetting, because subset can have unintended results. Here's how to do that, and add new names at the same time. To set names similar to your data frame names, it's best to add names to the list first.

> dflist <- setNames(dflist, grep("dfx0", ls(), value = TRUE))
> setNames(lapply(dflist, function(x) x[x$yr==2001, ]), 
                  gsub("df", "", names(dflist)))
# $x01
#   city   yr
# 2    b 2001
# 
# $x012
#   city   yr
# 2    e 2001
# 
# $x02
#   city   yr
# 3    c 2001
# 
# $x022
#   city   yr
# 4    g 2001

这篇关于R在数据框上循环以创建新的数据框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆