2014-11-24 50 views
0

我有数据的阵列可以大致如下建模:- [R增量列值

x=data.frame(c(2,2,2),c(3,4,6),c(3,4,6), c("x/-","x/x","-/x")) 
names(x)=c("A","B","C","D") 

我希望B的值改变为如果(C + 1) 只有 D中的第一个字符是 - 。

我曾尝试使用以下并遍历行尝试:

if(substring(x$D, 1,1) == "-") 
{ 
    x$B <- x$C + 1  
} 

这种方法似乎但是并没有工作。有没有办法使用sapply来做到这一点?

感谢,

马特

回答

2

您可以使用ifelsewithin

within(x, B <- ifelse(substr(D, 1, 1) == "-", C + 1, B)) 
# A B C D 
# 1 2 3 3 x/- 
# 2 2 4 4 x/x 
# 3 2 7 6 -/x 

代替substr或者,你可以使用grepl

within(x, B <- ifelse(grepl("^[-]", D), C + 1, B)) 
# A B C D 
# 1 2 3 3 x/- 
# 2 2 4 4 x/x 
# 3 2 7 6 -/x 
+0

太好了,谢谢! – mattbawn 2014-11-24 18:13:25

1

data.table解决方案。

require(data.table) 

x <- data.table(c(2,2,2), c(3,4,6), c(3,4,6), c("x/-","x/x","-/x")) 
setnames(x, c("A","B","C","D")) 

x[grepl("^[-]", D), B := C + 1]