sapply(),带有unique()和条件-R
我试图做一个简单而直接的输出,以查看(1)每个变量的不同值的数量,以及(2)显示哪些不同值是小于X个不同值的变量的不同值。运行此操作时:sapply(),带有unique()和条件-R,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我试图做一个简单而直接的输出,以查看(1)每个变量的不同值的数量,以及(2)显示哪些不同值是小于X个不同值的变量的不同值。运行此操作时: sapply(mtcars, function(z) NROW(unique(z))) 它为每个变量提供了非常简单、直接的信息: mpg 25 cyl 3 disp 27 hp 22 drat 22 wt 29 qsec 30 vs 2 am 2 gear 3 carb 6 但是,我仍然需要显示不同的值。假设我们将显示少于10个不同值的
sapply(mtcars, function(z) NROW(unique(z)))
它为每个变量提供了非常简单、直接的信息:
mpg 25
cyl 3
disp 27
hp 22
drat 22
wt 29
qsec 30
vs 2
am 2
gear 3
carb 6
但是,我仍然需要显示不同的值。假设我们将显示少于10个不同值的变量的不同值。到目前为止,我已经做到了这一点:
sapply(mtcars, function(z) if(NROW(unique(z)) < 10) {paste0(NROW(unique(z)), " ; ", unique(z))} else {NROW(unique(z))})
您可以尝试这样做,并根据每列中
唯一值的长度创建嵌套列表
sapply(mtcars, function(x) {
uniq <- unique(x)
if (length(uniq) < 10)
list(no_uniq_values = length(uniq), uniq_values = uniq)
else
length(uniq)
})
#$mpg
#[1] 25
#$cyl
#$cyl$no_uniq_values
#[1] 3
#$cyl$uniq_values
#[1] 6 4 8
#$disp
#[1] 27
#$hp
#[1] 22
#$drat
#[1] 22
#.....
#.....
sapply(mtcars,功能(x){
uniq您可以尝试类似的方法,并根据每个列中unique
值的length
创建嵌套列表
sapply(mtcars, function(x) {
uniq <- unique(x)
if (length(uniq) < 10)
list(no_uniq_values = length(uniq), uniq_values = uniq)
else
length(uniq)
})
#$mpg
#[1] 25
#$cyl
#$cyl$no_uniq_values
#[1] 3
#$cyl$uniq_values
#[1] 6 4 8
#$disp
#[1] 27
#$hp
#[1] 22
#$drat
#[1] 22
#.....
#.....
sapply(mtcars,功能(x){
uniq我接受@H1答案,因为它正是预期的输出(一个简单的输出):
sapply(mtcars,函数(z)if(长度(唯一(z))<10){paste0(长度(唯一(z)),“;”,toString(唯一(z))}else{length(唯一(z))})
我接受@H1答案,因为它正是预期的输出(一个简单的输出):
sapply(mtcars,函数(z)if(长度(唯一(z))<10){paste0(长度(唯一(z)),“;”,toString(唯一(z))}else{length(唯一(z))})
我想到了一个选项。首先,我创建了一个包含每个变量中唯一值数量的数据框,即tmp1
。然后,我创建了一个包含每个变量中唯一值的字符向量。由于您指定如果唯一值少于10个,则要打印唯一值,因此我手动然后,我绑定了tmp1
和tmp2
,并更改了列的顺序和变量名
library(dplyr)
summarize_all(mtcars,
.funs = list(~n_distinct(.))) %>%
stack -> tmp1
summarize_all(mtcars,
.funs = list(~if_else(n_distinct(.) < 10,
toString(unique(.)),
"More than 10 unique values"))) %>%
unlist -> tmp2
bind_cols(tmp1, distinct_value = tmp2) %>%
select(variable = ind, everything())
# variable values distinct_value
#1 mpg 25 More than 10 unique values
#2 cyl 3 6, 4, 8
#3 disp 27 More than 10 unique values
#4 hp 22 More than 10 unique values
#5 drat 22 More than 10 unique values
#6 wt 29 More than 10 unique values
#7 qsec 30 More than 10 unique values
#8 vs 2 0, 1
#9 am 2 1, 0
#10 gear 3 4, 3, 5
#11 carb 6 4, 1, 2, 3, 6, 8
库(dplyr)
总结所有(mtcars,
.funs=列表(~n_独立()%%>%
堆栈->tmp1
总结所有(mtcars,
.funs=列表(~if_else(n_distinct(.)<10,
toString(唯一(),
“超过10个唯一值”)))%%>%
取消列表->tmp2
绑定列(tmp1,不同值=tmp2)%>%
选择(variable=ind,everything())
#变量值
#1 mpg 25超过10个唯一值
#2缸3、6、4、8
#3显示27超过10个唯一值
#4 hp 22超过10个唯一值
#5 drat 22超过10个唯一值
#6.29超过10个唯一值
#7 qsec 30超过10个唯一值
#8比20,1
#上午九时二十一分
#10档3、4、3、5
#11碳水化合物6 4,1,2,3,6,8
我想到了一个选项。首先,我创建了一个包含每个变量中唯一值数量的数据框,即tmp1
。然后,我创建了一个包含每个变量中唯一值的字符向量。由于您指定如果唯一值少于10个,则要打印唯一值,因此我手动然后,我绑定了tmp1
和tmp2
,并更改了列的顺序和变量名
library(dplyr)
summarize_all(mtcars,
.funs = list(~n_distinct(.))) %>%
stack -> tmp1
summarize_all(mtcars,
.funs = list(~if_else(n_distinct(.) < 10,
toString(unique(.)),
"More than 10 unique values"))) %>%
unlist -> tmp2
bind_cols(tmp1, distinct_value = tmp2) %>%
select(variable = ind, everything())
# variable values distinct_value
#1 mpg 25 More than 10 unique values
#2 cyl 3 6, 4, 8
#3 disp 27 More than 10 unique values
#4 hp 22 More than 10 unique values
#5 drat 22 More than 10 unique values
#6 wt 29 More than 10 unique values
#7 qsec 30 More than 10 unique values
#8 vs 2 0, 1
#9 am 2 1, 0
#10 gear 3 4, 3, 5
#11 carb 6 4, 1, 2, 3, 6, 8
库(dplyr)
总结所有(mtcars,
.funs=列表(~n_独立()%%>%
堆栈->tmp1
总结所有(mtcars,
.funs=列表(~if_else(n_distinct(.)<10,
toString(唯一(),
“超过10个唯一值”)))%%>%
取消列表->tmp2
绑定列(tmp1,不同值=tmp2)%>%
选择(variable=ind,everything())
#变量值
#1 mpg 25超过10个唯一值
#2缸3、6、4、8
#3显示27超过10个唯一值
#4 hp 22超过10个唯一值
#5 drat 22超过10个唯一值
#6.29超过10个唯一值
#7 qsec 30超过10个唯一值
#8比20,1
#上午九时二十一分
#10档3、4、3、5
#11碳水化合物6 4,1,2,3,6,8
sapply(mtcars,function(z)if(length(unique(z))<10){paste0(length(unique(z)),“;”,toString(unique(z))}其他{length(unique(z))}}
sapply(mtcars,function(z)if(length(unique(z))<10){paste0(length(unique(z)),“;”,toString(unique(z))}其他{length(unique(z))}其他