Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sapply(),带有unique()和条件-R_R_Dplyr_Tidyverse - Fatal编程技术网

sapply(),带有unique()和条件-R

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个不同值的

我试图做一个简单而直接的输出,以查看(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) 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))}其他