我有这种数据框:
df<-data.frame(Value=c(0,1,2), A=c(3,2,0), B=c(1,4,2))
我想得到每个组(A,B)的值分布的向量,考虑到每列中的数字对应于每个“值”(来自直方图的数据)的出现次数。所以如果我在A列中有5为值1,我想在向量结果中有5个1(1,1,1,1,1)。在示例中,结果将是::
A<-c(0,0,0,1,1)
B<-c(0,1,1,1,1,2,2)
THX
答案 0 :(得分:4)
您可以将功能apply()
和rep()
结合起来。在rep()
中,您使用A列和B列将time=
设置为重复Value
。
apply(df[,-1],2,function(x) rep(df$Value,times=x))
$A
[1] 0 0 0 1 1
$B
[1] 0 1 1 1 1 2 2
正如@Arun函数apply()
所指出的,在应用函数之前将数据帧强制转换为矩阵,这是不必要的。在这种情况下,使用函数lapply()
可以实现相同的结果,因为我们将函数应用于列。
lapply(df[,-1],function(x) rep(df$Value,times=x))
$A
[1] 0 0 0 1 1
$B
[1] 0 1 1 1 1 2 2