如何将向量作为数据帧中的元素处理?[R]

如何将向量作为数据帧中的元素处理?[R],r,vector,dataframe,element,R,Vector,Dataframe,Element,如何在数据帧的一个元素中存储几个数字? 例如,我需要数据的摘要,包括每列中的类和值 dat = data.frame(STATE = 1:5, MONTH = 1:5) 应产生: var class values STATE numeric c(1,2,3,4,5) MONTH numeric c(1,2,3,4,5) 现在我试着: dat = data.frame(STATE = 1:5,

如何在数据帧的一个元素中存储几个数字? 例如,我需要数据的摘要,包括每列中的类和值

dat = data.frame(STATE = 1:5,
                 MONTH = 1:5)
应产生:

var       class    values
STATE    numeric   c(1,2,3,4,5)
MONTH    numeric   c(1,2,3,4,5)
现在我试着:

dat = data.frame(STATE = 1:5,
                 MONTH = 1:5)

vars = data.frame(var = colnames(dat), class = NA, values = NA,
                  stringsAsFactors = F)
vars$class = sapply(dat, class)

vars
#      var   class values
# 1  STATE integer     NA
# 2  MONTH integer     NA

vars$values = sapply(dat, function(x) unique(x))
# Error in `$<-.data.frame`(`*tmp*`, "values", value = c(1L, 2L, 3L, 4L,  : 
#                replacement has 5 rows, data has 2

# UPDATE: @jMathew 's answer:
vars$values = sapply(dat, function(x) list(unique(x)))
vars
# var   class        values
# 1 STATE integer 1, 2, 3, 4, 5
# 2 MONTH integer 1, 2, 3, 4, 5
有人能告诉我为什么这在第二种情况下有效而在第一种情况下无效吗?谢谢

我们可以试试

do.call(rbind,lapply(seq_along(dat), function(i) 
       data.frame(var=names(dat)[i], class=class(dat[,i]), 
         values= sprintf('c(%s)', toString(unique(dat[,i]))))))
#    var   class           values
#1 STATE integer c(1, 2, 3, 4, 5)
#2 MONTH integer c(1, 2, 3, 4, 5)

我怀疑在你的第二个例子中,向量被强制到一个
列表
在你的第一个例子中试试这个

vars$values = sapply(dat, function(x) list(unique(x)))
vars$values = sapply(dat, function(x) list(unique(x)))