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_Dataframe - Fatal编程技术网

如何在R中循环和修改多个数据帧

如何在R中循环和修改多个数据帧,r,loops,dataframe,R,Loops,Dataframe,我有数据帧A,B,C。。。并希望以相同的方式修改每个数据帧,例如,重新排序所有数据帧中存在的因子的因子级别: A = data.frame( x=c('x','x','y','y','z','z') ) B = data.frame( x=c('x','y','z') ) C = data.frame( x=c('x','x','x','y','y','y','z','z','z') ) A$x = factor( A$x, levels=c('z','y','x') ) B$x = fact

我有数据帧A,B,C。。。并希望以相同的方式修改每个数据帧,例如,重新排序所有数据帧中存在的因子的因子级别:

A = data.frame( x=c('x','x','y','y','z','z') )
B = data.frame( x=c('x','y','z') )
C = data.frame( x=c('x','x','x','y','y','y','z','z','z') )

A$x = factor( A$x, levels=c('z','y','x') )
B$x = factor( B$x, levels=c('z','y','x') )
C$x = factor( C$x, levels=c('z','y','x') )
如果有大量的数据帧和/或大量的修改要做,这将变得非常困难。如何使用循环或其他更好的方法简洁地完成?直截了当的方法,如

for ( D in list( A, B, C ) ) {
D$x = factor( D$x, levels=c('z','y','x') )
}
不起作用,因为它不修改原始数据帧


编辑:添加了A、B和C的定义以使其可复制。

关于R,需要注意的一点是,关于,
如果不需要显式循环,可以使用Lappy:

ll <- lapply(
    list(A, B, C),
    function(df) {
        df$x <- factor(df$x, levels=c('z', 'y', 'x'))
        return(df)
    }
)

ll您能提供吗?已经添加了A、B和C的定义,以便您可以运行代码。谢谢。我知道这很烦人,尤其是当情况很明显的时候,但这是一个很好的做法,让我们的生活更轻松:)谢谢你的回答。不幸的是,它对我的情况不起作用(我认为),因为数据帧都有不同的行数。我将修改我的示例以明确这一点。这就是为什么需要复制示例的原因。如果您不输入
return(df)
,您将无法返回数据帧元素。这是可以的,但我希望有一种方法来修改原始数据帧,或者更准确地说,我希望继续以原始名称引用它们。有没有一种简单的方法可以使用这个解决方案的输出来获得这个结果?我已经发布了一个编辑示例解决方案,但我不能说我喜欢它。
ll <- lapply(
    list(A, B, C),
    function(df) {
        df$x <- factor(df$x, levels=c('z', 'y', 'x'))
        return(df)
    }
)
dfs <- list('A', 'B', 'C')
levels <- c('z', 'y', 'x')

l <- lapply(
    dfs,
    function(df) {
        # Get data frame by name
        df <- get(df)
        df$x <- factor(df$x, levels=levels)
        return(df)
    }
)


for ( i in 1:length(dfs)) {
    assign(dfs[[i]], l[[i]])
}