如何在数据框的一个元素中存储一些数字? 例如,我想要一个我的数据摘要,包括每列中的类和值。
template <class MyB>
struct A {
MyB *b_;
};
template <template <class> class MyA>
struct B {
MyA<B> *a_;
};
int main() {
using MyB = B<A>;
using MyA = A<MyB>;
MyA a;
MyB b;
a.b_ = &b; b.a_ = &a;
return 0;
}
应该产生:
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 $ STATE)= c(1,2,3,4,5),并且R认为它应该是数据框中的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
有人可以告诉我为什么这种情况适用于第二种情况而不是第一种情况?感谢
答案 0 :(得分:1)
我们可以试试
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)
答案 1 :(得分:1)
我怀疑在你的第二种情况下,向量被强制转换为list
试试,这是你的第一个例子
vars$values = sapply(dat, function(x) list(unique(x)))