簡體   English   中英

如何在R中循環並修改多個數據幀

[英]How to loop through and modify multiple data frames in R

我有數據幀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的一點要注意的是,就賦值而言<-是傳遞性的,而=則不是。 因此,如果您的數據框架在這方面完全相同,您應該可以執行以下操作:

A$x <- B$x <- C$x <- factor( C$x, levels=c('z','y','x') )

如果您不需要顯式循環,則可以使用lapply:

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

由於只復制了數據,因此您必須使用lapply返回的列表。

編輯

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]])
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM