R根据一列中的值汇总跨列的唯一值
R summarize unique values across columns based on values from one column
我想知道基于 var_1 的值的每列唯一值的总数。
例如:
Test <- data.frame(var_1 = c("a","a","a", "b", "b", "c", "c", "c", "c", "c"), var_2 = c("bl","bf","bl", "bl","bf","bl","bl","bf","bc", "bg" ), var_3 = c("cf","cf","eg", "cf","cf","eg","cf","dr","eg","fg"))
我正在寻找的结果将基于 var_1 中的值,应该是:
var_1 var_2 var_3
a 2 2
b 2 1
c 3 4
然而,在尝试了各种方法(包括应用和 table)之后 - 聚合一直是最接近我正在寻找的东西,但是这个脚本导致每个条目的总数的摘要var_1 的值,但总数不唯一
agbyv1= aggregate(. ~ var_1, Test, length)
var_1 var_2 var_3
a 3 3
b 2 2
c 5 5
我试过了
unqbyv1= aggregate(. ~ var_1, Test, length(unique(x)))
但这没有用。
非常感谢任何帮助。
尝试
library(dplyr)
Test %>%
group_by(var_1) %>%
summarise_each(funs(n_distinct(.)))
或
library(data.table)#v1.9.5+
setDT(Test)[, lapply(.SD, uniqueN), var_1]
如果有 NA
setDT(Test)[, lapply(.SD, function(x) uniqueN(na.omit(x))), var_1]
或者您可以使用 aggregate
。默认情况下,na.action=na.omit
。所以,我们不需要任何修改。
aggregate(.~ var_1, Test, FUN=function(x) length(unique(x)) )
试试这个:
apply(Test[-1] , 2 , function(y) tapply(y,Test$var_1,function(x) length(unique(x))))
我想知道基于 var_1 的值的每列唯一值的总数。
例如:
Test <- data.frame(var_1 = c("a","a","a", "b", "b", "c", "c", "c", "c", "c"), var_2 = c("bl","bf","bl", "bl","bf","bl","bl","bf","bc", "bg" ), var_3 = c("cf","cf","eg", "cf","cf","eg","cf","dr","eg","fg"))
我正在寻找的结果将基于 var_1 中的值,应该是:
var_1 var_2 var_3
a 2 2
b 2 1
c 3 4
然而,在尝试了各种方法(包括应用和 table)之后 - 聚合一直是最接近我正在寻找的东西,但是这个脚本导致每个条目的总数的摘要var_1 的值,但总数不唯一
agbyv1= aggregate(. ~ var_1, Test, length)
var_1 var_2 var_3
a 3 3
b 2 2
c 5 5
我试过了
unqbyv1= aggregate(. ~ var_1, Test, length(unique(x)))
但这没有用。
非常感谢任何帮助。
尝试
library(dplyr)
Test %>%
group_by(var_1) %>%
summarise_each(funs(n_distinct(.)))
或
library(data.table)#v1.9.5+
setDT(Test)[, lapply(.SD, uniqueN), var_1]
如果有 NA
setDT(Test)[, lapply(.SD, function(x) uniqueN(na.omit(x))), var_1]
或者您可以使用 aggregate
。默认情况下,na.action=na.omit
。所以,我们不需要任何修改。
aggregate(.~ var_1, Test, FUN=function(x) length(unique(x)) )
试试这个:
apply(Test[-1] , 2 , function(y) tapply(y,Test$var_1,function(x) length(unique(x))))