用R中的分隔符分隔数据:如何指定字符在哪个分隔符(例如,5个字符中的第4个)处分隔



我在数据帧中有一列唯一的照片ID。每个照片ID由一长串字符组成_&";。

我想使用分隔符"将这些ID分成列_&";。

这听起来很简单,但我想在最后一个分隔符处将字符分为两列。例如,如果我的一个照片ID是:

"TV_Banana_122_下午_;

我正试图将结果拆分为:

"TV_Banana_122_下午";以及";Pre";

有没有办法指定我只想用第四个分隔符来分隔这个短语?

您可以使用strsplit和下面的正则表达式来分离字符串,然后使用do.callrbind来创建一个新的数据帧,每个部分都在自己的列中。

匹配特定分数的代码

df <- data.frame(x = c("TV_Banana_122_Afternoon_Pre"))
df_new <- data.frame(do.call("rbind", strsplit(sub('(^[^_]+_[^_]+_[^_]+_[^_]+)_(.*)$', '\1 \2', df), ' ')))
df_new

输出

X1  X2
1 TV_Banana_122_Afternoon Pre

根据@AnilGoyal的评论,如果您需要匹配额外的下划线,您只需要在sub中的第一个匹配中添加额外的_[^_]+。请参阅下面的示例。

将字符串与附加UNDERSCORE匹配的代码

df2 <- data.frame(x = c("TV_Banana_122_Afternoon_Test_Pre"))
df2_new <- data.frame(do.call("rbind", strsplit(sub('(^[^_]+_[^_]+_[^_]+_[^_]+_[^_]+)_(.*)$', '\1 \2', df2), ' ')))
df2_new

输出

X1  X2
1 TV_Banana_122_Afternoon_Test Pre

此外,如果您有带不同#s下划线的字符串,但您总是想在最后一个下划线处拆分,则可以根据下面的正则表达式将整个字符串匹配到最后一个底线。

匹配最后一个UNDERSCORE的代码

df_new2 <- data.frame(do.call("rbind", strsplit(sub('(.*)_(.*)$', '\1 \2', df), ' ')))
df_new2

输出

X1  X2
1 TV_Banana_122_Afternoon Pre

最新更新