我试图实现的是将一列拆分为多列.我希望第一列包含"F",第二列包含"US",第三列包含"CA6"或"DL",第四列包含"Z13"或"U13"等.我的整个df遵循X.XX的相同模式.XXXX.XXX或X.XX.XXX.XXX或X.XX.XX.XXX和我知道第三列是我的问题所在,因为长度不同.我过去只使用过substr,我可以在这里使用一些if语句,但我想学习如何使用stringr包和POSIX来实现这一点(除非有更好的选择).提前谢谢你.

这是我的df:

c("F.US.CLE.V13", "F.US.CA6.U13", "F.US.CA6.U13", "F.US.CA6.U13", 
"F.US.CA6.U13", "F.US.CA6.U13", "F.US.CA6.U13", "F.US.CA6.U13", 
"F.US.DL.U13", "F.US.DL.U13", "F.US.DL.U13", "F.US.DL.Z13", "F.US.DL.Z13"
)

推荐答案

一个非常直接的方法是在你的角色向量上使用read.table:

> read.table(text = text, sep = ".", colClasses = "character")
   V1 V2  V3  V4
1   F US CLE V13
2   F US CA6 U13
3   F US CA6 U13
4   F US CA6 U13
5   F US CA6 U13
6   F US CA6 U13
7   F US CA6 U13
8   F US CA6 U13
9   F US  DL U13
10  F US  DL U13
11  F US  DL U13
12  F US  DL Z13
13  F US  DL Z13

需要指定colClasses,否则F将转换为FALSE(这是我需要在"splitstackshape"中修复的,否则我会建议:)


更新(>一年后)...

或者,您可以使用my cSplit function,如下所示:

cSplit(as.data.table(text), "text", ".")
#     text_1 text_2 text_3 text_4
#  1:      F     US    CLE    V13
#  2:      F     US    CA6    U13
#  3:      F     US    CA6    U13
#  4:      F     US    CA6    U13
#  5:      F     US    CA6    U13
#  6:      F     US    CA6    U13
#  7:      F     US    CA6    U13
#  8:      F     US    CA6    U13
#  9:      F     US     DL    U13
# 10:      F     US     DL    U13
# 11:      F     US     DL    U13
# 12:      F     US     DL    Z13
# 13:      F     US     DL    Z13

或者是《tidyr》中的separate个,比如:

library(dplyr)
library(tidyr)

as.data.frame(text) %>% separate(text, into = paste("V", 1:4, sep = "_"))
#    V_1 V_2 V_3 V_4
# 1    F  US CLE V13
# 2    F  US CA6 U13
# 3    F  US CA6 U13
# 4    F  US CA6 U13
# 5    F  US CA6 U13
# 6    F  US CA6 U13
# 7    F  US CA6 U13
# 8    F  US CA6 U13
# 9    F  US  DL U13
# 10   F  US  DL U13
# 11   F  US  DL U13
# 12   F  US  DL Z13
# 13   F  US  DL Z13

R相关问答推荐

在数据框中求和,条件来自另一列

如何做每列报告的最新值的新数据框?

从R中的数字字符串创建单个数字的列总计

如何在ggplot中将连续的x轴更改为离散的x轴?

如何在 R 中使用矢量化来根据条件更改 DF 值?

如何使用 r data.table 填写数据框中所有可能的列?

如何将字符串向量(每个都给出命令)转换为 R 中的函数?

如果向量之间有公共元素/没有公共元素,则返回 TRUE/FALSE

在指定时间后无法收敛时停止 Keras

调用堆栈的稳定性如何,特别是 -1?

R Plotly Bar Chart - 添加水平线标记

使用 Tidyverse 将数据从一列转换为多列

高级:为什么 ?function(){} 在 R 中有效

拆分字母序列,同时保留原始序列位置

如何将所有列重命名为R中的中间分隔符?

R pivot_longer 带有存根名称和最后一个下划线

在 qqnorm 图中添加一条直线

如何更有效地使用 map_dfr() 过滤数据集?

使用 dplyr 随机标记组内的记录

在函数定义期间判断并保存参数变量值?