R Table 变量 x 水平
R Table with variables x levels
我有一个包含多个变量的数据框,每个变量的值为 TRUE、FALSE 或 NA。我正在尝试总结数据,但一切都按照我想要的方式工作。
names <- c("n1","n2","n3","n4","n5","n6")
groupname <- c("g1","g2","g3","g4","g4","g4")
var1 <- c(TRUE,TRUE,NA,FALSE,TRUE,NA)
var2 <- c(FALSE,TRUE,NA,FALSE,TRUE,NA)
var3 <- c(FALSE,TRUE,NA,FALSE,TRUE,NA)
df <- data.frame(names,groupname,var1,var2,var3)
我正在尝试汇总各个组的数据:
G4 TRUE FALSE NA
var1 3 1 2
var2 2 2 2
var3 2 2 2
我可以 table(groupname,var1)
单独完成它们,但我试图在一个 table 中完成所有操作。有什么建议吗?
使用dplyr
library(dplyr)
df %>% gather("key", "value", var1:var3) %>%
group_by(key) %>%
summarise(true = sum(value==TRUE, na.rm=T),
false = sum(!value, na.rm=T),
missing = sum(is.na(value)))
# key true false missing
#1 var1 3 1 2
#2 var2 2 2 2
#3 var3 2 2 2
在 base R 中,您可以使用 table
获取计数,使用 lapply
到 运行 通过变量,然后使用 do.call
将结果放在一起。 [
的次要子集根据需要对列进行排序。
do.call(rbind, lapply(df[3:5], table, useNA="ifany"))[, c(2,1,3)]
TRUE FALSE <NA>
var1 3 1 2
var2 2 2 2
var3 2 2 2
如果每个变量都具有所有级别(TRUE、FALSE、NA),这将起作用。如果缺少一个级别,您可以通过向 table
提供一个因子变量来告诉它用 0 计数填充它。
这是一个例子。
# expand data set
df$var4 <- c(TRUE, NA)
do.call(rbind, lapply(df[3:6],
function(i) table(factor(i, levels=c(TRUE, FALSE, NA)),
useNA="ifany")))[, c(2,1,3)]
FALSE TRUE <NA>
var1 1 3 2
var2 2 2 2
var3 2 2 2
var4 0 3 3
我有一个包含多个变量的数据框,每个变量的值为 TRUE、FALSE 或 NA。我正在尝试总结数据,但一切都按照我想要的方式工作。
names <- c("n1","n2","n3","n4","n5","n6")
groupname <- c("g1","g2","g3","g4","g4","g4")
var1 <- c(TRUE,TRUE,NA,FALSE,TRUE,NA)
var2 <- c(FALSE,TRUE,NA,FALSE,TRUE,NA)
var3 <- c(FALSE,TRUE,NA,FALSE,TRUE,NA)
df <- data.frame(names,groupname,var1,var2,var3)
我正在尝试汇总各个组的数据:
G4 TRUE FALSE NA
var1 3 1 2
var2 2 2 2
var3 2 2 2
我可以 table(groupname,var1)
单独完成它们,但我试图在一个 table 中完成所有操作。有什么建议吗?
使用dplyr
library(dplyr)
df %>% gather("key", "value", var1:var3) %>%
group_by(key) %>%
summarise(true = sum(value==TRUE, na.rm=T),
false = sum(!value, na.rm=T),
missing = sum(is.na(value)))
# key true false missing
#1 var1 3 1 2
#2 var2 2 2 2
#3 var3 2 2 2
在 base R 中,您可以使用 table
获取计数,使用 lapply
到 运行 通过变量,然后使用 do.call
将结果放在一起。 [
的次要子集根据需要对列进行排序。
do.call(rbind, lapply(df[3:5], table, useNA="ifany"))[, c(2,1,3)]
TRUE FALSE <NA>
var1 3 1 2
var2 2 2 2
var3 2 2 2
如果每个变量都具有所有级别(TRUE、FALSE、NA),这将起作用。如果缺少一个级别,您可以通过向 table
提供一个因子变量来告诉它用 0 计数填充它。
这是一个例子。
# expand data set
df$var4 <- c(TRUE, NA)
do.call(rbind, lapply(df[3:6],
function(i) table(factor(i, levels=c(TRUE, FALSE, NA)),
useNA="ifany")))[, c(2,1,3)]
FALSE TRUE <NA>
var1 1 3 2
var2 2 2 2
var3 2 2 2
var4 0 3 3