从数据框

时间:2018-05-29 12:25:35

标签: r dataframe

请随时修改该问题的标题

我有一个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))

2 个答案:

答案 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