在我的数据集中,我有6个变量,每个变量有四个可能的值(1,10,100或NA)
set.seed(1)
x <- setNames(
as.data.frame(replicate(6, sample(c(1,10,100,NA), 10, replace = TRUE))),
letters[c(1:5,7)])
我想计算每个值在所有六个变量中出现的频率,导致三个刻度(No_of_1s,No_of_10s,No_of_100s)都在0到6之间。
到目前为止,我使用了这个
All<-data.frame(a,b,c,d,e,g)
All_table<-apply(All,MARGIN=1,table)
给出了表格中每种情况的1s,10s和100s的计数。
我现在正在考虑使用
No_of_1s<-All_table[,1]
创建我需要的变量。但是,似乎All_table
不为空行创建零,而是在这种情况下省略它们,导致巨大的混乱。
有谁知道如何调整这个?
这个问题的解决方案可能非常简单,但我似乎无法自己解决这个问题。
答案 0 :(得分:3)
我愿意(感谢@akrun)......
var percentComplete = elapsedTime / animationDuration;
或使用reshape2包
table(id = seq(nrow(x))[row(x)], unlist(x), useNA= "ifany")
如果您的数据遵循此模式更高的数字,您可能还需要查看library(reshape2)
x$id = seq(nrow(x))
table(melt(x, id="id")[, c("id","value")], useNA="ifany")
value
id 1 10 100 <NA>
1 1 3 0 2
2 2 1 2 1
3 0 2 3 1
4 3 1 1 1
5 2 1 1 2
6 1 2 1 2
7 2 1 1 2
8 1 2 2 1
9 0 1 4 1
10 1 3 1 1
。
答案 1 :(得分:2)
您可以使用类似
的内容No_of_10s <- rowSums(All == 10)
No_of_100s <- rowSums(All == 100)
我在data.frame中对此进行了测试,如下所示:
x <- data.frame(a = sample(c(1,10,100), 10, replace = TRUE), b = sample(c(1,10,100), 10, replace = TRUE), c=sample(c(1,10,100), 10, replace = TRUE), d=sample(c(1,10,100), 10, replace = TRUE), e=sample(c(1,10,100), 10, replace = TRUE), g=sample(c(1,10,100), 10, replace = TRUE))
rowSums(x == 10)
# answer