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_astrainD_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)