处理R中的数字和字符元素(在一个变量中)

时间:2014-11-26 15:10:19

标签: r

假设我有这个数据集:

> mydata <- data.frame(id=c(1,2,3,4,5,67,7,8,9), value=c(2,6,23,77,2,"e",4,5,"f"))
> mydata
  id value
1  1     2
2  2     6
3  3    23
4  4    77
5  5     2
6 67     e
7  7     4
8  8     5
9  9     f

如果是数字,我需要将mydata $ value除以2,否则保留原样。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

尝试

mydata$value <- as.character(mydata$value)
with(mydata, ifelse(grepl('^-?[0-9.]+$',value), as.numeric(value)/2, value))
#[1] "1"    "3"    "11.5" "38.5" "1"    "e"    "2"    "2.5"  "f"   

使用其他案例进行测试(如评论中提到的@Carl Witthoft)

foo<-c(1,3, "hi4u",7, -42)
grepl('^-?[0-9.]+$',foo)
#[1]  TRUE  TRUE FALSE  TRUE  TRUE

答案 1 :(得分:3)

首先,拍摄以这种方式构建数据的天才。然后,考虑使用像

这样的搜索
mynums <- which (!(mydata$value%in%letters))
mydata$value[mynums] <- mydata$value[mynums]/2

我需要对这种方法进行折磨测试,因为我已经选择了akrun,因为他的解决方案可能存在差距。