在R中将两个数据帧列堆叠到一个单独的数据帧列中

在R中将两个数据帧列堆叠到一个单独的数据帧列中,r,dataframe,R,Dataframe,我将以两种方式提出我的问题。首先,请求任务的解决方案;第二,作为对我总体目标的描述(如果我想得太多,有一个更简单的解决方案) 1)任务解决方案 数据上下文:每行包含四个价格变量(列),表示(a)受访者认为产品太便宜的价格;(b) 被视为讨价还价的价格;(c) 被认为昂贵的价格;(d) 这个价格太贵了,买不起 ## mock data set a<-c(1,5,3,4,5) b<-c(6,6,5,6,8) c<-c(7,8,8,10,9) d<-c(8,10,9,11,12

我将以两种方式提出我的问题。首先,请求任务的解决方案;第二,作为对我总体目标的描述(如果我想得太多,有一个更简单的解决方案)

1)任务解决方案

数据上下文:每行包含四个价格变量(列),表示(a)受访者认为产品太便宜的价格;(b) 被视为讨价还价的价格;(c) 被认为昂贵的价格;(d) 这个价格太贵了,买不起

## mock data set
a<-c(1,5,3,4,5)
b<-c(6,6,5,6,8)
c<-c(7,8,8,10,9)
d<-c(8,10,9,11,12)
df<-as.data.frame(cbind(a,b,c,d))

## result
#  a b  c  d
#1 1 6  7  8
#2 5 6  8 10
#3 3 5  8  9
#4 4 6 10 11
#5 5 8  9 12
我最初的想法是使用rbind()和unique()

相反,“列”被视为行并水平堆叠

  V1 V2 V3 V4 V5
1  1  5  3  4  5
2  6  6  5  6  8
3  7  8  8 10  9
4  8 10  9 11 12
如何堆叠a、b、c和d,使price只包含一列(“V1”),其中包含所有二十个响应?(之后我可以单独处理的唯一部分)

2)总体目标:大局

最终,我希望在每个价格点(由上述唯一值定义)为每个价格(太便宜、便宜、昂贵、太昂贵)创建人口的累积份额。例如,百分之多少的受访者认为1美元太便宜,百分之多少的受访者认为3美元或以下太便宜,等等

“便宜”和“昂贵”的累积份额随后被反转为“不便宜”和“不昂贵”,四个向量位于如下数据框中:

         buckets   too.cheap not.bargain not.expensive too.expensive
1  0.01 to  0.50 0.000000000           1             1             0
2  0.51 to  1.00 0.000000000           1             1             0
3  1.01 to  1.50 0.000000000           1             1             0
4  1.51 to  2.00 0.000000000           1             1             0
5  2.01 to  2.50 0.001041667           1             1             0
6  2.51 to  3.00 0.001041667           1             1             0
...
从中我可以画出这样的东西:

         buckets   too.cheap not.bargain not.expensive too.expensive
1  0.01 to  0.50 0.000000000           1             1             0
2  0.51 to  1.00 0.000000000           1             1             0
3  1.01 to  1.50 0.000000000           1             1             0
4  1.51 to  2.00 0.000000000           1             1             0
5  2.01 to  2.50 0.001041667           1             1             0
6  2.51 to  3.00 0.001041667           1             1             0
...

上面,我使用定义的价格桶($0.50范围)和hist()函数完成了绘图目标

然而,这些线的交点有一定的意义,我想计算任何一条线交叉的确切价格。当x轴由价格范围而不是特定值定义时,这是很困难的;因此,希望切换到精确值,并需要生成唯一的价格变量


[后记:该分析基于Peter Van Westendorp的价格敏感度表()它知道实际的局限性,但与我的研究相关,我的研究将探索消费者在不同处理方式下的价值感知,而不是定义实际的真实价格。我提到这一点有两个原因:1)为了在想到另一种方法时对我的目标有更深入的了解,2)保持hread关注的是机制,而不是是否应该使用价格敏感度计。]

我们可以
将data.frame取消列出
向量
,并获得
排序
唯一
元素

sort(unique(unlist(df)))

当我们执行
rbind
时,它会创建一个
矩阵
,并且
矩阵的
唯一
调用
唯一。矩阵

methods('unique')
#[1] unique.array           unique.bibentry*       unique.data.frame      unique.data.table*     unique.default         unique.IDate*          unique.ITime*         
#[8] unique.matrix          unique.numeric_version unique.POSIXlt         unique.warnings      
它在
中循环,因为默认的
边距
为1,然后查找
唯一的
元素。相反,如果我们使用“价格”,则
as.vector
c(价格)
将转换为
vector

sort(unique(c(price)))
#[1]  1  3  4  5  6  7  8  9 10 11 12
如果我们使用
unique.default

sort(unique.default(price))
#[1]  1  3  4  5  6  7  8  9 10 11 12

sort(unique(unlist(df)))
谢谢!你的回答很完美,你在我的屏幕刷新之前回答了我的问题!(这让我怀疑我花了多少时间写这么长的帖子:)不过,我非常感谢你花这么多时间写这么长的帖子
sort(unique(c(price)))
#[1]  1  3  4  5  6  7  8  9 10 11 12
sort(unique.default(price))
#[1]  1  3  4  5  6  7  8  9 10 11 12