我正在尝试将数据集转换为整齐的格式以用于项目,但是我一直坚持将行值分成不同的列,因为其中一些具有额外的值,但它们位于左侧我需要的信息。
我的数据集从每一行的第一列开始,并带有位置/ 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”,这是我需要保留的信息。我的想法是在值之前使用NA的“占位符”列,而不使用“ A”,然后将整个对象分成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的列。
我尝试使用单独的函数,然后删除多余的函数,但这会导致它删除最后一个值(年份)并将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
答案 0 :(得分:1)
假设您的数据帧称为df
,可以使用sub
df$Strains_w_Seq = sub("^A/", "", df$Strains_w_Seq)