相关疑难解决方法(0)

将数据框架字符串列拆分为多个列

我想要获取表格的数据

before = data.frame(attr = c(1,30,4,6), type=c('foo_and_bar','foo_and_bar_2'))
  attr          type
1    1   foo_and_bar
2   30 foo_and_bar_2
3    4   foo_and_bar
4    6 foo_and_bar_2
Run Code Online (Sandbox Code Playgroud)

并使用split()上面的列" type"来得到这样的东西:

  attr type_1 type_2
1    1    foo    bar
2   30    foo  bar_2
3    4    foo    bar
4    6    foo  bar_2
Run Code Online (Sandbox Code Playgroud)

我提出了一些令人难以置信的复杂问题,涉及某种形式的apply工作,但我已经错了.这似乎太复杂了,不是最好的方式.我可以使用strsplit如下,但不清楚如何将其恢复到数据框中的2列.

> strsplit(as.character(before$type),'_and_')
[[1]]
[1] "foo" "bar"

[[2]]
[1] "foo"   "bar_2"

[[3]]
[1] "foo" "bar"

[[4]]
[1] "foo"   "bar_2"
Run Code Online (Sandbox Code Playgroud)

谢谢你的任何指示.我还没有完全理解R列表.

string split r dataframe r-faq

218
推荐指数
13
解决办法
32万
查看次数

在数据框中的分隔符处拆分列

我想基于分隔符在数据帧中将一列拆分为两列.例如,

a|b
b|c
Run Code Online (Sandbox Code Playgroud)

成为

a    b
b    c
Run Code Online (Sandbox Code Playgroud)

在数据框内.

谢谢!

r dataframe

98
推荐指数
6
解决办法
21万
查看次数

为什么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
查看次数

标签 统计

r ×3

dataframe ×2

r-faq ×1

regex ×1

split ×1

string ×1

strsplit ×1