Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.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_Dataframe - Fatal编程技术网

R 在全局环境中,在多个但不是所有数据帧上传递函数的简明方法?

R 在全局环境中,在多个但不是所有数据帧上传递函数的简明方法?,r,dataframe,R,Dataframe,我有一些相当大的数据帧,我机器上的RAM无法处理组合数据帧大小的请求/功能。因此,它们每年都处于全球环境中。目前我正在为所有的数据帧处理相同的函数,但不知道是否有更简洁的方法。如果我有数据帧:CY_19,CY_20,CY_21,df1,df2;在全球环境中,我一直在执行以下代码: df_21 <- df_21[(df_21$x=='N'),] df_20 <- df_20[(df_20$x=='N'),] df_19 <- df_19[(df_19$x=='N'),] df_1

我有一些相当大的数据帧,我机器上的RAM无法处理组合数据帧大小的请求/功能。因此,它们每年都处于全球环境中。目前我正在为所有的数据帧处理相同的函数,但不知道是否有更简洁的方法。如果我有数据帧:CY_19,CY_20,CY_21,df1,df2;在全球环境中,我一直在执行以下代码:

df_21 <- df_21[(df_21$x=='N'),]
df_20 <- df_20[(df_20$x=='N'),]
df_19 <- df_19[(df_19$x=='N'),]
df_19 <- df_19[(df_19$y=='No'),]
df_20 <- df_20[(df_20$y=='No'),]
df_21 <- df_21[(df_21$y=='No'),]

df_21迭代数据帧名称的字符向量,使用
get
从每个数据帧的名称中检索数据帧,并
assign
rbind
结果。我们使用
ls
来获取它们的名称的字符向量,但是如果您有非常相似的名称,您要排除它们,请改进正则表达式或用它们名称的显式字符向量替换ls(…)

nms <- ls(pattern = "^df_")  # c("df_19", "df_20", "df_21")
Sub1 <- function(df) subset(df, x == "N" & y == "No")
for(nm in nms) assign(nm, Sub1(get(nm)))

nms <- ls(pattern = "^CY_")  # c("CY_19", "CY_20", "CY_21")
Sub2 <- function(df) subset(df, grepl("txt", z, ignore.case = TRUE))
combined_df <- do.call("rbind", lapply(nms, function(nm) Sub2(get(nm))))

nms你没有接近这一点。如果您创建了一个
数据.frame
列表,然后使用
lappy
,而不是许多
数据.frame
,您的生活会轻松得多。谢谢您,这是一个很好的信息。我确实有一个问题,因为我以前从未见过。引号中插入符号的用法是什么?您有两个
“^”
,觉得这可能很有用,但希望理解。这与
c()
相同吗?由于引用更改搜索以要求该值并键入该值,google结果没有结果。
ls(pattern=“…”)
返回工作区中所有对象名称的字符向量,这些对象的名称与指定的正则表达式匹配。在正则表达式中,^表示字符串的开头,因此仅匹配名称开头的df_u。有关R中正则表达式的更多信息,请参见
帮助(“regex”、“base”)
,另请参见
nms <- ls(pattern = "^df_")  # c("df_19", "df_20", "df_21")
Sub1 <- function(df) subset(df, x == "N" & y == "No")
for(nm in nms) assign(nm, Sub1(get(nm)))

nms <- ls(pattern = "^CY_")  # c("CY_19", "CY_20", "CY_21")
Sub2 <- function(df) subset(df, grepl("txt", z, ignore.case = TRUE))
combined_df <- do.call("rbind", lapply(nms, function(nm) Sub2(get(nm))))