R 将具有不同分隔符出现次数的列名称拆分为字符串,并将唯一的 strings/string 计数分配给新数据框
R split column names with different occurrences of delimiter into strings and assign unique strings/string counts to a new dataframe
我有一个大型数据框,其列名如下。我还没有尝试处理任何数据,只是列名。
strainA_1_batch1 | strainA_2_bacth2 | strainB_1_bacth1 | strainC_1_bacth2 | strainC_2_bacth2 | strainD_a_1_bacth1 | strainD_b_1_bacth1 |
---|
我正在尝试制作一些这样的统计表:
株数 | 批次数 |
---|---|
5 | 2 |
批量 | 株数 |
---|---|
批次1 | 4 |
批次2 | 2 |
应变 | 样本数量 |
---|---|
应变A | 2 |
菌株 B | 1 |
应变C | 2 |
StrainD_a | 1 |
StrainD_b | 1 |
我的第一个问题是如何处理 strainD_a
和 strainD_b
之类的事情,因为如果我在“_”上拆分,我将拆分菌株名称的一部分,并且拆分次数不同获取信息更加困难。我在 python 中通过指定拆分数并从右侧开始拆分来处理类似的事情,但我不确定 R 是否等效。
其次,也许我使用的搜索词有误,但我只找到了有关如何将一列分成多列的信息。我不需要拆分列,我只想从列名中获取信息。然后使用名称每个部分的唯一出现来创建新的列或行名称,并计算每个名称的总出现次数。我对统计表的组织方式不挑剔,只要信息准确
我认为如果您在“下划线、数字、下划线”处拆分,它会为您上面的陈述提供解决方案。这确实消除了数字和相关信息。这重要吗?
names <- c("strainA_1_batch1", "strainA_2_batch2", "strainB_1_batch1", "strainC_1_batch2", "strainC_2_batch2",
"strainD_a_1_batch1", "strainD_b_1_batch1")
#split at the underscore, digit and underscore
splitList <- strsplit(names, "_\d_")
#convert to dataframe
df <-data.frame(t(as.data.frame.list(splitList)))
#clean up data.frame
rownames(df)<-NULL
names(df)<-c("Strain", "Batch")
df
#report
table(df$Strain)
table(df$Batch)
另一种选择是将数字两边的下划线替换为“”(或其他字符),然后在 space.
上拆分names<-gsub("_(\d)_", " \1 ", names)