r - 分隔具有不同长度的行值并删除其中一个值
问题描述
我正在尝试将数据集操作为整洁的格式以用于项目,但我一直坚持将我的行值分成不同的列,因为其中一些具有额外的值,但它们位于我的信息的左侧需要。
我的数据集从每行的第一列开始,位置/ID/年份
# A tibble: 6 x 190
Strains_w_Seq `HK/1/1968` `HK/107/1971` `BI/21793/1972` `EN/42/1972`
<chr> <chr> <chr> <chr> <chr>
1 BI/16190/1968 640 0 640 320
2 BI/16398/1968 1163 0 0 1163
3 HK/1/1968 1280 1280 0 2560
4 BI/808/1969 320 0 0 640
5 BI/908/1969 1280 0 0 640
6 BI/17938/1969 554 0 0 453
但它以以下格式结尾:类型/位置/ID/年份
A tibble: 6 x 190
Strains_w_Seq `HK/1/1968` `HK/107/1971` `BI/21793/1972` `EN/42/1972`
<chr> <chr> <chr> <chr> <chr>
1 A/ONTARIO/RV… 0 0 0 0
2 A/ONTARIO/RV… 0 0 0 0
3 A/ONTARIO/RV… 0 0 0 0
我想在其余值之前删除“A”,这些值是我需要保留的信息。我的想法是在没有“A”的值之前创建一个 NA 的“占位符”列,然后将整个事物分成 4 个对象的向量。
前任:
NA/BI/16398/1968
NA/BI/16398/1968
NA/BI/16398/1968
NA/BI/16398/1968
...
A/TAIWAN/864/2007
A/TAIWAN/864/2007
A/TAIWAN/864/2007
A/TAIWAN/864/2007
这样我就可以根据“/”进行分离,然后简单地删除我添加的 NA 列和额外的 A。
我尝试使用单独的函数,然后删除额外的,但这会导致它删除最后一个值(Year)并将 A 放在“Geo_Origin”列中
library(tidyverse)
df <- separate(df, Strains_w_Seq, into = c("Geo_Origin", "Strain_Num", "Isolation_Year"), sep = "/", extra = "drop")
我认为我不能使用 fill = "left" ,因为左侧没有实际信息可供拉取。
为了防止我的数据丢失,我结束了:
df <- separate(df, Strains_w_Seq, into = c("Geo_Origin", "Strain_Num", "Isolation_Year"), sep = "/", extra = "merge")
前约 800 个观测值得到正确处理,其中
TAIWAN 864 2007
TAIWAN 864 2007
但我仍然在底部得到约 200 个观察结果:
A TAIWAN 864/2007
A TAIWAN 864/2007
A TAIWAN 864/2007
解决方案
假设您的数据框被调用df
,这可以使用sub
df$Strains_w_Seq = sub("^A/", "", df$Strains_w_Seq)
推荐阅读
- javascript - 从 Mysql DB 到 Javascript 计时器的日期
- php - nuSoap中的数组到字符串转换
- android - ConstraintLayout中的右文本视图,文本被切断
- java - 从键盘输入更新的更新方法不喜欢方法调用?
- java - 用相等的字符分割字符串
- jqgrid - 免费 jqGrid 和 ace admin 模板标题显示问题
- r - Plotly - 创建具有连续色标的饼图
- html - Vue.js v-bind:style 伪元素 :: 在内容图标之后
- python - TypeError: ufunc 'true_divide' 输出(类型码'd')不能被强制转换为提供的输出参数(类型码'q')
- python - Django 表单字段上的验证器给出属性错误