首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于另一列中字符匹配的r增量列值

基于另一列中字符匹配的r增量列值
EN

Stack Overflow用户
提问于 2014-11-24 17:12:51
回答 2查看 1.1K关注 0票数 0

我有一个数据数组,可以大致建模如下:

代码语言:javascript
复制
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中的第一个字符是-。

我尝试使用以下方法并对行进行迭代:

代码语言:javascript
复制
if(substring(x$D, 1,1) == "-") 
{
  x$B <- x$C + 1       
}

然而,这种方法似乎不起作用。有什么方法可以用来完成吗?

谢谢,

哑光

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-24 17:20:57

您可以使用ifelsewithin

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-11-24 19:43:20

data.table溶液

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27110320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档