请随时修改该问题的标题。
我有一个data.frame
,其中包含三个标签变量。
require(Hmisc)
set.seed(0)
df <- data.frame(var1=sample(c(0, 1, NA), 100, replace=TRUE),
var2=sample(c(0, 1, NA), 100, replace=TRUE),
var3=sample(c(0, 1, NA), 100, replace=TRUE))
label(df$var1) <- "One"
label(df$var2) <- "Two"
label(df$var3) <- "Three"
我想计算百分比并将它们组合在一起,就像这样
0 1 <NA>
One 0.27 0.37 0.36
Two 0.29 0.41 0.30
Three 0.45 0.31 0.24
以下代码确实有效。但我的问题是如何简化此代码?变量的名称已编号。您可以这样做以获取所有相关变量
names(df)[startsWith(names(df), "var")]
点是变量的数量是变量/ flexibel。 ;)
我通过名称前缀得到它们(在这个例子中只是var
)。真实数据包含如下变量:v3_5_*
,v4_1_*
,...
有任何想法或暗示吗?
这是完整的(但不是简化的)代码。
#!/usr/bin/env Rscript
set.seed(0)
df <- data.frame(var1=sample(c(0, 1, NA), 100, replace=TRUE),
var2=sample(c(0, 1, NA), 100, replace=TRUE),
var3=sample(c(0, 1, NA), 100, replace=TRUE))
label(df$var1) <- "One"
label(df$var2) <- "Two"
label(df$var3) <- "Three"
t1 <- table(df$var1, useNA="always")
t1 <- 100 / sum(t1) * t1 / 100
t2 <- table(df$var2, useNA="always")
t2 <- 100 / sum(t2) * t2 / 100
t3 <- table(df$var3, useNA="always")
t3 <- 100 / sum(t3) * t3 / 100
m <- rbind(t1, t2, t3)
rownames(m) <- c(label(df$var1),
label(df$var2),
label(df$var3))
答案 0 :(得分:1)
使用void BarChart::hoverTest(bool status, int index)
{
if(status == true) {
set->setColor(Qt::red); //changes to bar set color to red mouse when hovers on bar set
}
else {
set->setColor(QColor(52, 152, 219)); //reset the color when mouse leaves
}
}
,因为您已经这样做了:
table
答案 1 :(得分:1)
方法是使用table
apply
m <- apply(df, MAR = 2, table, useNA = "always")
m <- t(prop.table(m, margin = 2))
rownames(m) <- sapply(df, label)
其中prop.table(m, margin = 2)
计算列元素除以列总和(基本上是例如t1 / sum(t1)
正在执行的操作)和label
来自Hmisc
包。我们得到:
m
# 0 1 <NA>
# One 0.27 0.37 0.36
# Two 0.29 0.41 0.30
# Three 0.45 0.31 0.24