首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从R字符串中选择文本以创建新对象

从R字符串中选择文本以创建新对象
EN

Stack Overflow用户
提问于 2014-02-27 23:45:49
回答 1查看 64关注 0票数 0

我是R的新手,我现在被卡住了。我有一些观点是由法律文章组成的,fe:

代码语言:javascript
运行
复制
BIV:III,XXVIII.1(b);CIV:2.

因此,我将它们拆分,生成一个字符串,列出每个观察结果和使用的法律文章。这看起来像这样:

400230的ArtAGr列表

代码语言:javascript
运行
复制
chr[1:2] "BIV:III,XXVIII.1(b)" "CIV:2"
chr[1:1] "ILA:2.3(b)"
chr[1:3] "BIV:IB.3(d)" "CIV:7,9" "ILA:VII.1"

BIV和CIV需要成为我的新变量。然而,观察结果各不相同,因此一些观察结果同时包括BIV和CIV,而其他观察结果包括其他法律条款,如ILA: in。3(B)现在,我想从这些人那里创建一个数据框架,以便我可以将所有观察结果分组到每个主要文章的专栏中。最终,完美的数据帧应该如下所示:

代码语言:javascript
运行
复制
Dispute    BIV            CIV            ILA
1        III, XXVIII.1(b)   2            NA
2          NA              NA            II.3(b)
3        IV.3(d)          7,9            VII.1
4          II              NA            NA

因此,我需要创建一个新对象,将包含BIV等文本的所有观察结果分组,对于不使用此法律文章的观察结果,则为O或N/A。如果您有任何想法,我们将不胜感激!

非常感谢!斯文

EN

回答 1

Stack Overflow用户

发布于 2014-02-28 19:49:35

这是一种方法:

代码语言:javascript
运行
复制
# a vector of character strings (not the splitted ones)
vec <- c("BIV:III,XXVIII.1(b);CIV:2",
         "ILA:II.3(b)",
         "BIV:IB.3(d);CIV:7,9;ILA:VII.1")

# split strings
s <- strsplit(vec, "[;:]")

# target words
tar <- c("BIV", "CIV", "ILA")

# create data frame
setNames(as.data.frame(do.call(rbind, lapply(s, function(x) 
  replace(rep(NA_character_, length(tar)), 
          match(x[c(TRUE, FALSE)], tar), x[c(FALSE, TRUE)])))), tar)

结果是:

代码语言:javascript
运行
复制
              BIV  CIV     ILA
1 III,XXVIII.1(b)    2    <NA>
2            <NA> <NA> II.3(b)
3         IB.3(d)  7,9   VII.1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22073403

复制
相关文章

相似问题

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