我有一组数据可以大致建模如下:
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")
如果仅 D中的第一个字符是 - ,我希望将B的值更改为(C + 1)。
我尝试过使用以下内容并迭代行:
if(substring(x$D, 1,1) == "-")
{
x$B <- x$C + 1
}
然而,这种方法似乎不起作用。有没有办法用sapply来做到这一点?
谢谢,
马特
答案 0 :(得分:2)
您可以使用ifelse
和within
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
答案 1 :(得分: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]