使用R格式化数据框中的所有变量

时间:2014-08-08 06:46:34

标签: r loops for-loop

我使用以下代码格式化数据

lbls <- sort(levels(mydata1$CIGEVER))
lbls <- (sub("^\\([0-9]+\\) +(.+$)", "\\1", lbls))
mydata1$CIGEVER<- as.numeric(sub("^\\(0*([0-9]+)\\).+$", "\\1", mydata1$CIGEVER))

我现在有90个变量。我试过循环来通过此代码格式化所有变量

for (i in 1:nrow(mydata1) ) 
{
    for (j in 1:ncol(mydata1))
    {
        mydata1[i,j]<- as.numeric(sub("^\\(0*([0-9]+)\\).+$", "\\1", mydata1[i,j])) 

    }       
}

但是,它耗费了太多时间。任何人都可以帮助我提高效率。

原始数据看起来像

Column Name
---------------

(1) Good
(2) Very Good
(3) Excellent
(4) Bad

应用格式化后

Column Name
-------------------
1
2
3
4

谢谢, 纳温

3 个答案:

答案 0 :(得分:1)

当子应用于向量时,您可以一次完成所有列:

for (j in 1:ncol(mydata1))
     {
        mydata1[,j]<- as.numeric(sub("^\\(0*([0-9]+)\\).+$", "\\1", mydata1[,j])) 

     }       
}

使用apply类功能的方法甚至更快。

答案 1 :(得分:1)

你可以尝试:

 library(qdap)
 sapply(lapply(dat, bracketXtract, "round"),as.numeric)
#      col1 col2
#[1,]    1    1
#[2,]    2    2
#[3,]    3    3
#[4,]    4    4

答案 2 :(得分:0)

如果您提供的格式正确,您可以使用lapply来避免双循环:

mydata1[] <- lapply(mydata1, function(x) as.numeric(sub("^\\(0*([0-9]+)\\).+$", "\\1", x)))

(未在没有样本数据的情况下进行测试)