首页 > 解决方案 > 如何根据类提取非因子列的唯一值

问题描述

我正在创建一个data.frame作为codebook现有的data.frame一个,其中一列codebook是现有的每一列中的值范围data.frame。我需要从以下列填充每个唯一值classcharacter用“/”分隔它们

1)我尝试使用条件是列的并且是的if else语句classfunctionunique()

2)我也使用了该if else语句并获取了列的第一个元素(x[1]用作函数)并收到了预期的输出

dat是现有的数据框

function(dat){
dfr <- data.frame(
row.names = c(1:length(colnames(dat))),
ColumnNames = names(dat),
class = sapply(dat, class),
Range = sapply(dat, function(x)
  if(class(x) == "character")
           paste(unique(x), sep = " / ")
        else if(class(x) == "numeric" || class(x) == "integer")
           paste(min(x), max(x), sep = " - ")
        else
           class(x)),```

function(dat){
dfr <- data.frame(
row.names = c(1:length(colnames(dat))),
ColumnNames = names(dat),
class = sapply(dat, class),
Range = sapply(dat, function(x)
  if(class(x) == "character")
           x[1]
        else if(class(x) == "numeric" || class(x) == "integer")
           paste(min(x), max(x), sep = " - ")
        else
           class(x)),```

我希望输出data.frame能够说明我在 Range 列下需要的唯一值,但是我收到以下错误消息:

Error in data.frame(row.names = c(1:length(colnames(dat))), ColumnNames = 
names(dat),  : 
arguments imply differing number of rows: 68, 6```

但是,当我使用 x[1] 作为函数时,它按预期返回了列的第一个元素

标签: r

解决方案


在 OP 的第一个函数中

paste(unique(x), sep = " / ")

返回与输入 ( ) 相同的输出unique(x),可以是长度大于 1 的向量。它是函数中唯一可以返回长度大于 1 的向量的行。代码可以更改为

paste(unique(x), collapse = " / ")

差异是可重现的

paste(1:3, sep=' / ')
#[1] "1" "2" "3"  # returns the same length
paste(1:3, collapse=" / ")
#[1] "1 / 2 / 3" # single string

推荐阅读