标签: strsplit

在列中拆分分隔的字符串并作为新行插入

我有一个数据框如下:

+-----+-------+
|  V1 |  V2   |
+-----+-------+
|  1  | a,b,c |
|  2  | a,c   |
|  3  | b,d   |
|  4  | e,f   |
|  .  | .     |
+-----+-------+
Run Code Online (Sandbox Code Playgroud)

每个字母表都是用逗号分隔的字符.我想在每个逗号上拆分V2并将拆分字符串作为新行插入.例如,所需的输出将是:

+----+----+
| V1 | V2 |
+----+----+
|  1 |  a |
|  1 |  b |
|  1 |  c |
|  2 |  a |
|  2 |  c |
|  3 |  b |
|  3 |  d |
|  4 | …
Run Code Online (Sandbox Code Playgroud)

r data-manipulation strsplit reshape dataframe

85
推荐指数
5
解决办法
6万
查看次数

将字符串切割成固定宽度字符元素的向量

我有一个包含文本字符串的对象:

x <- "xxyyxyxy"
Run Code Online (Sandbox Code Playgroud)

我想把它拆分成一个向量,每个元素包含两个字母:

[1] "xx" "yy" "xy" "xy"
Run Code Online (Sandbox Code Playgroud)

看起来strsplit应该是我的票,但由于我没有正则表达式foo,我无法弄清楚如何使这个功能将字符串按照我想要的方式切成块.我该怎么做?

r strsplit

53
推荐指数
7
解决办法
6万
查看次数

如何避免R中的循环:从列表中选择项目

我可以使用循环解决这个问题,但我正在尝试在向量中思考,所以我的代码将更多R-esque.

我有一个名单.格式为firstname_lastname.我想从这个列表中删除一个只有名字的单独列表.我似乎无法理解如何做到这一点.这是一些示例数据:

t <- c("bob_smith","mary_jane","jose_chung","michael_marx","charlie_ivan")
tsplit <- strsplit(t,"_")
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

> tsplit
[[1]]
[1] "bob"   "smith"

[[2]]
[1] "mary" "jane"

[[3]]
[1] "jose"  "chung"

[[4]]
[1] "michael" "marx"   

[[5]]
[1] "charlie" "ivan"   
Run Code Online (Sandbox Code Playgroud)

我可以使用这样的循环得到我想要的东西:

for (i in 1:length(tsplit)){
    if (i==1) {t_out <- tsplit[[i]][1]} else{t_out <- append(t_out, tsplit[[i]][1])} 
}
Run Code Online (Sandbox Code Playgroud)

这会给我这个:

t_out
[1] "bob"     "mary"    "jose"    "michael" "charlie"
Run Code Online (Sandbox Code Playgroud)

那么我怎么能没有循环呢?

r list vector strsplit

31
推荐指数
5
解决办法
3万
查看次数

R字符串拆分函数中的非字符参数(strsplit)

这有效

x <- "0.466:1.187:2.216:1.196"
y <- as.numeric(unlist(strsplit(x, ":")))
Run Code Online (Sandbox Code Playgroud)

blat$LRwAvg所有的值都X如上所示,但这不起作用

for (i in 1:50){
  y <- as.numeric(unlist(strsplit(blat$LRwAvg[i], "\\:")))
  blat$meanLRwAvg[i]=mean(y)
}
Run Code Online (Sandbox Code Playgroud)

因为:

strsplit中的错误(blat $ LRwAvg [i],"\:"):非字符参数

如果我有一个,两个或空反斜杠并不重要.

我的问题是什么?(一般情况下,我的意思是在这项特殊任务中,技术上)

string for-loop r strsplit

29
推荐指数
1
解决办法
6万
查看次数

按任意数量的空格拆分字符串

我有以下字符串:

[1] "10012      ----      ----      ----      ----       CAB    UNCH                    CAB"
Run Code Online (Sandbox Code Playgroud)

我希望通过间隙来分割这个字符串,但是间隙具有可变数量的空格.有没有办法使用strsplit()函数来分割这个字符串并返回一个已删除所有间隙的8个元素的向量?

一行代码是首选.

string r strsplit

27
推荐指数
2
解决办法
3万
查看次数

为什么strsplit使用正向前瞻和后观断言匹配不同?

常识和使用健全性检查gregexpr()表明,下面的后视和前瞻断言应该恰好在以下位置匹配testString:

testString <- "text XX text"
BB  <- "(?<= XX )"
FF  <- "(?= XX )"

as.vector(gregexpr(BB, testString, perl=TRUE)[[1]])
# [1] 9
as.vector(gregexpr(FF, testString, perl=TRUE)[[1]][1])
# [1] 5
Run Code Online (Sandbox Code Playgroud)

strsplit()但是,使用这些匹配位置的方式不同,testString在使用lookbehind断言时在一个位置分割,但在使用前瞻断言时在两个位置 - 第二个看起来不正确 - .

strsplit(testString, BB, perl=TRUE)
# [[1]]
# [1] "text XX " "text"    

strsplit(testString, FF, perl=TRUE)
# [[1]]
# [1] "text"    " "       "XX text"
Run Code Online (Sandbox Code Playgroud)

我有两个问题:(Q1)这里发生了什么?并且(Q2)如何才能strsplit()更好地表现?


更新: Theodore Lytras的优秀答案解释了发生了什么,以及地址(Q1).我的答案建立在他的基础上,以确定一个补救措施,解决(Q2) …

regex r strsplit

26
推荐指数
3
解决办法
1399
查看次数

如何使用带句点的strsplit函数

我想将其后的字符串拆分为句点.我试着strsplit()"."split说法,但没有得到我想要的结果.

s <- "I.want.to.split"
strsplit(s, ".")
[[1]]
 [1] "" "" "" "" "" "" "" "" "" "" "" "" "" "" ""
Run Code Online (Sandbox Code Playgroud)

我想要的输出是s在列表中拆分为4个元素,如下所示.

[[1]]
[1] "I"     "want"  "to"    "split"
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

r strsplit

24
推荐指数
2
解决办法
2万
查看次数

strsplit一审

我想编写一个strsplit命令来抓取第一个")"并拆分字符串.

例如:

f("12)34)56")
"12" "34)56"
Run Code Online (Sandbox Code Playgroud)

我已经阅读了其他几个相关的正则表达式问题,但我担心我无法做出这样的正面或反面.谢谢你的任何帮助.

regex r strsplit

19
推荐指数
4
解决办法
9519
查看次数

我应该如何使用strsplit拆分和保留元素?

R中的strsplit函数是什么,匹配并删除给定的正则表达式以将字符串的其余部分拆分为向量.

>strsplit("abc123def", "[0-9]+")
[[1]]
[1] "abc" ""    ""    "def" 
Run Code Online (Sandbox Code Playgroud)

但是我应该如何使用正则表达式以相同的方式拆分字符串,还要保留匹配?我需要以下内容.

>FUNCTION("abc123def", "[0-9]+")
[[1]]
[1] "abc" "123" "def" 
Run Code Online (Sandbox Code Playgroud)

使用strapply("abc123def","[0-9] + | [az] +")在这里工作,但如果正则表达式无法捕获除匹配之外的其余字符串怎么办?

r strsplit

18
推荐指数
2
解决办法
5797
查看次数

使用dplyr mutate和现有列的子字符串创建新列

我有一个包含一列字符串的数据框,并希望将这些字符串的子字符串提取到一个新列中.

下面是一些示例代码和数据,显示我想在id列中的最后一个下划线字符后面获取字符串以创建new_id列.该id列条目总是有2个下划线它总是最后子,我想.

df = data.frame( id = I(c("abcd_123_ABC","abc_5234_NHYK")), x = c(1.0,2.0) )

require(dplyr)

df = df %>% dplyr::mutate(new_id = strsplit(id, split="_")[[1]][3])
Run Code Online (Sandbox Code Playgroud)

我期待strsplit依次对每一行采取行动.

但是,该new_id列仅包含ABC在每一行中,而我想ABC在第1行和NHYK第2行中包含.您是否知道为什么会失败以及如何实现我想要的?

r strsplit dplyr

16
推荐指数
4
解决办法
2万
查看次数

标签 统计

r ×10

strsplit ×10

regex ×2

string ×2

data-manipulation ×1

dataframe ×1

dplyr ×1

for-loop ×1

list ×1

reshape ×1

vector ×1