我使用以下代码格式化数据
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
谢谢, 纳温
答案 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)))
(未在没有样本数据的情况下进行测试)