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