如何在R中转换多个列

问题描述 投票:1回答:1

我有一个从csv文件中检索的数据框。我需要获取某些列的列类型,并将这些类型应用于另一个data.frame的相应列。

例如,在某些步骤之后,来自csv的d​​ata.frame称为Table1。

header <- names(Table1)
"Acct" "Tran"
class(Table1$Acct)
"character"
class(Table1$Tran)
"character"

然后我需要将Table2的相应“Acct”和“Tran”列转换为字符。

我试过了

class(Table1[header])
[1] "data.frame"
class(Table1$header)
[1] "NULL"

如何将Table1的列类型应用于Table2?我是否必须使用for循环进行传输?

谢谢

**** UPDATES ****由于Table1的数据类型不复杂,我创建了一个手动转换列类型的函数。 as.numeric(as.character(After))很重要。如果After是一个因子,as.numeric(After)将更改值。

Typeconvertion < - function(Before,After){

CLASSTYPE <-class(前)

if(classtype ==“factor”){After <-as.character(After)}

else if(classtype ==“integer”){After < - as.numeric(as.character(After))}

else if(classtype ==“numeric”){After < - as.numeric(as.character(After))}

else if(classtype ==“character”){After < - as.character(After)}

else {After < - After}

}

r csv
1个回答
0
投票

考虑一个更灵活的功能。

    matchColClasses<- function(df1, df2){
    # Purpose:  protect joins from column type mismatches - a problem with multi-column empty df          
    # Input:    df1 - master for class assignments, df2 - for col reclass and return.
    # Output:   df2 with shared columns classed to match df1
    # Usage:    df2 <- matchColClasses(df1, df2)

      sharedColNames <- names(df1)[names(df1) %in% names(df2)]
      sharedColTypes <- sapply(df1[,sharedColNames], class)

      for (n in sharedColNames) {
        class(df2[, n]) <- sharedColTypes[n]
      }

      return(df2)
     }
© www.soinside.com 2019 - 2024. All rights reserved.