假设我有这个数据集:
> 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,否则保留原样。我该如何解决这个问题?
答案 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,因为他的解决方案可能存在差距。