我有一个数据数组,可以大致建模如下:
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
}然而,这种方法似乎不起作用。有什么方法可以用来完成吗?
谢谢,
哑光
发布于 2014-11-24 17:20:57
您可以使用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发布于 2014-11-24 19:43:20
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]https://stackoverflow.com/questions/27110320
复制相似问题