如何根据其类提取非因子列的唯一值

时间:2019-06-16 15:45:34

标签: r

我正在创建一个data.frame作为现有codebook的{​​{1}},data.frame的其中一列是每一列中的值范围现有codebook中的一个。 我需要填充data.frame列中的每个唯一值:class用“ /”分隔它们

1)i尝试使用character语句,其中条件是列的if else,而classfunction

2)i还使用了unique()语句并获取了列的第一个元素(使用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

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

1 个答案:

答案 0 :(得分:0)

在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