R +;/-列名称折叠和求和

R +;/-列名称折叠和求和,r,sum,R,Sum,我需要将“+/-”列名折叠为一个列名并添加计数。下面是数据集的一个示例 data <- as.data.frame(c("+A","-A","+A","-A", "+A","+A","-B","+B","-B", "C","C")) colnames(data) <- "class" table(data$class) -A -B +A +B C 2 2 4 1 2 有时这些+/-变量可能缺失,或者“C”类也可能缺失。即使我缺少一些类别,我如何将它们相加 有什么想

我需要将“+/-”列名折叠为一个列名并添加计数。下面是数据集的一个示例

data <- as.data.frame(c("+A","-A","+A","-A", "+A","+A","-B","+B","-B", "C","C"))
colnames(data) <- "class"

table(data$class)
-A -B +A +B  C 
 2  2  4  1  2 
有时这些+/-变量可能缺失,或者“C”类也可能缺失。即使我缺少一些类别,我如何将它们相加

有什么想法吗

table(gsub("\\W", "", data$class))

A B C 
6 3 2 
这将为您提供类
的输出。如果这还不够,您可以将其包装为.data.frame(t(c(x))以具有相同的输出,但属于类
data.frame
,如下所示:

as.data.frame(t(c(table(gsub("\\W", "", data$class)))))

我修改了你的例子,以涵盖你文章中提到的某些案例。假设您的数据中只有3个类别,我们可以提取字符
A-C
,将其转换为具有3个级别的
因子
,然后使用
。在这种情况下,我们没有类别
“C”
的任何条目,将
级别转换为
因子
有助于保持计数,即使没有类别

data <- data.frame(col = c("+A","A","+A","-A","+A","+A","-B","+B","-B"))

table(factor(sub(".*([A-C]).*", "\\1", data$col), levels = LETTERS[1:3]))
#A B C 
#6 3 0 

数据不使用
作为列名。它是一个基本的R函数。
data <- data.frame(col = c("+A","A","+A","-A","+A","+A","-B","+B","-B"))

table(factor(sub(".*([A-C]).*", "\\1", data$col), levels = LETTERS[1:3]))
#A B C 
#6 3 0