R中不同列上不同值的总和

R中不同列上不同值的总和,r,dataframe,R,Dataframe,假设在R中的数据帧中有以下形式的数据: Property 1 | Property 2 | ... | Property n A B R C A S D F C . . . . . .

假设在R中的数据帧中有以下形式的数据:

Property 1 | Property 2 | ... | Property n
    A            B                 R
    C            A                 S 
    D            F                 C
    .            .                 . 
    .            .                 . 
    .            .                 . 
    R            Z                 X 
任何单元格中的n个属性都可以采用A到Z中的任意一个字母。现在,我想计算每行26个字母中的任意一个出现在该行的次数,并在属性n旁边的新列中给出该数字。例如,在n个属性的第一行中有7次A,6次B,0次C,等等,代码给出了下表

Property 1 | Property 2 | ... | Property n | A | B | C | ... | Z 
    A            B                 R         7   6   0 | ... | 2 
    C            A                 S       
    D            F                 C
    .            .                 . 
    .            .                 . 
    .            .                 . 
    R            Z                 X 
R中有这样的函数吗?尽管速度很慢,但我认为我可以以

x <- vector(length=nrow(tr))
for (i in 1:nrow(tr)) {
x[i] <- count(tr[i,], vars="A")
}
或者更糟糕的是,如果“A”在n个属性中不存在一次,我就会得到错误

Error in unique.default(x) : 
unique() can only be applied to vectors
 Error in eval(expr, envir, enclos) : object 'A' not found

这里可能的解决方案是什么

您可以将
lappy
rowSums
结合使用来快速完成此操作。我只使用了三个“属性”生成了一些假数据


我知道一定有那么容易做到的事情。非常感谢。正如后续研究一样:当单元格中出现一般单词而不是字母时(例如“是”、“否”),是否可以通过TEST@Taufi,将这些单词组合起来,是的,应该很好!您可以通过:
test查看它
set.seed(1)
df <- data.frame(Property1 = sample(LETTERS, 6), Property2 = sample(LETTERS, 6), Property3 = sample(LETTERS, 6))

df[,LETTERS] <- lapply(LETTERS, function(x) rowSums(df==x))
df[,c(1:6)]
  Property1 Property2 Property3 A B C
1         J         G         M 0 0 0
2         T         J         O 0 0 0
3         W         A         L 1 0 0
4         E         I         E 0 0 0
5         O         T         S 0 0 0
6         C         H         Y 0 0 1