Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.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
R 如何基于类提取非因子列的唯一值_R - Fatal编程技术网

R 如何基于类提取非因子列的唯一值

R 如何基于类提取非因子列的唯一值,r,R,我正在创建一个数据.frame作为现有数据的码本。frame和码本的一列是现有数据.frame的每列中的值范围。 我需要填充类:字符列中的每个唯一值,并用“/”分隔它们 1) 我尝试使用if-else语句,其中条件是列的class,而函数是unique() 2) 我还使用了if-else语句,并使用列的第一个元素(使用x[1]作为函数)并收到了预期的输出 dat是现有的数据帧 function(dat){ dfr <- data.frame( row.names = c(1:length(

我正在创建一个
数据.frame
作为现有
数据的
码本
。frame
码本
的一列是现有
数据.frame
的每列中的值范围。 我需要填充
字符
列中的每个唯一值,并用“/”分隔它们

1) 我尝试使用
if-else
语句,其中条件是列的
class
,而
函数是
unique()

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)),```
但是,当我使用x[1]作为函数时,它返回列的第一个元素作为
在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

在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

我认为在第一个函数中,您需要
paste(unique(x),collapse=“/”
,因为如果执行
paste(1:5,sep=“/”
),它除了返回字符向量并将其更改为
paste(1:5,collapse=“/”
返回单个字符串外,什么都不做。我认为在第一个函数中,您需要
paste(unique(x),collapse=“/”
,因为如果你粘贴(1:5,sep=“/”)
,它除了返回字符向量并将其更改为粘贴(1:5,collapse=“/”)返回一个字符串谢谢akrun。不确定我怎么没想到尝试
折叠
谢谢akrun。不确定我怎么没想到尝试
折叠