在R中使用多个变量和多个度量进行转置

在R中使用多个变量和多个度量进行转置,r,transpose,R,Transpose,我以前是SAS用户-因为我没有SAS了,所以我需要学习在工作中使用R。 数据集具有以下列: market date sitename impression clicks 我想把它转换成: market date sitename-impression sitename-clicks 我认为在SAS中我曾经做过: Proc Transpose by market date; id sitename; var impression clicks; run; 我确实有一本关于R的书,在谷歌上搜

我以前是SAS用户-因为我没有SAS了,所以我需要学习在工作中使用R。 数据集具有以下列:

market date sitename impression clicks
我想把它转换成:

market date sitename-impression  sitename-clicks
我认为在SAS中我曾经做过:

Proc Transpose
by market date;
id sitename;
var impression clicks;
run;
我确实有一本关于R的书,在谷歌上搜索了很多,但找不到有效的解决方案

如果有人能帮忙,我将不胜感激


提前感谢

让我首先说欢迎来到stackoverflow。很高兴有新用户。当你问一个问题时,提供你正在使用的代码和一个看起来像原始的可复制的数据集是很有帮助的,并鼓励你这样做。这被称为最小可复制示例。要在此处获取数据集,可以使用以下两个选项:在对象名称周围使用
dput()
,剪切并粘贴控制台中显示的内容,或者直接发布数据帧。对于代码,请提供复制问题所需的所有代码。我希望这对你以后提出的问题有所帮助

我可能不完全理解,但我认为您希望转换而不是转置数据

dat <- data.frame(market=rnorm(10), date=rnorm(10),   #let's create a data set
    sitename=rnorm(10), impression=rnorm(10),  clicks=rnorm(10))
dat  #look at it (I pasted it below)

 #   > dat                                                      
 #          market        date   sitename impression      clicks
 #   1  -0.9593797 -0.08411994  1.6079129 -0.5204772 -0.31633966
 #   2  -0.5088689  1.78799500 -0.2469315  1.3476964 -0.04344779
 #   3  -0.1527465  0.81673996  1.7824969 -1.5531260 -1.28304384
 #   4  -0.7026194  0.52072913 -0.1174356  0.5722210 -1.20474443
 #   5  -0.4537490 -0.69139062  1.1124277 -0.2452974 -0.33025320
 #   6   0.7466588  0.36318337 -0.4623319 -0.9036768 -0.65754302
 #   7   0.8007612  2.59588554  0.1820732  0.4318629 -0.36308748
 #   8   1.0781715 -1.01512734  0.2297475  0.9219439 -1.15687902
 #   9   0.3731450 -0.19004572  0.5190749 -1.4020371 -0.97370295
 #   10  0.7724259  1.76528303  0.5781786 -0.5490849 -0.83819036

#now to create the new columns (I think this is what you want)
#the easiest way is to use transform.  ?tranform for more        
dat.new <- transform(dat, sitename.clicks=sitename-clicks,   
    impression.clicks=impression-clicks)
dat.new  #here's the new data set.  Notice it has the new and old columns.

#To get rid of the old columns you can use indexing and specify the columns you want.
dat.new[, c(1:2, 6:7)]

#We could have also done:
dat.new[, c(1,2,6,7)]
#or said the columns not wanted with negative indexing:
dat.new[, -c(3:5)]

dat让我首先说欢迎来到stackoverflow。很高兴有新用户。当你问一个问题时,提供你正在使用的代码和一个看起来像原始的可复制的数据集是很有帮助的,并鼓励你这样做。这被称为最小可复制示例。要在此处获取数据集,可以使用以下两个选项:在对象名称周围使用
dput()
,剪切并粘贴控制台中显示的内容,或者直接发布数据帧。对于代码,请提供复制问题所需的所有代码。我希望这对你以后提出的问题有所帮助

我可能不完全理解,但我认为您希望转换而不是转置数据

dat <- data.frame(market=rnorm(10), date=rnorm(10),   #let's create a data set
    sitename=rnorm(10), impression=rnorm(10),  clicks=rnorm(10))
dat  #look at it (I pasted it below)

 #   > dat                                                      
 #          market        date   sitename impression      clicks
 #   1  -0.9593797 -0.08411994  1.6079129 -0.5204772 -0.31633966
 #   2  -0.5088689  1.78799500 -0.2469315  1.3476964 -0.04344779
 #   3  -0.1527465  0.81673996  1.7824969 -1.5531260 -1.28304384
 #   4  -0.7026194  0.52072913 -0.1174356  0.5722210 -1.20474443
 #   5  -0.4537490 -0.69139062  1.1124277 -0.2452974 -0.33025320
 #   6   0.7466588  0.36318337 -0.4623319 -0.9036768 -0.65754302
 #   7   0.8007612  2.59588554  0.1820732  0.4318629 -0.36308748
 #   8   1.0781715 -1.01512734  0.2297475  0.9219439 -1.15687902
 #   9   0.3731450 -0.19004572  0.5190749 -1.4020371 -0.97370295
 #   10  0.7724259  1.76528303  0.5781786 -0.5490849 -0.83819036

#now to create the new columns (I think this is what you want)
#the easiest way is to use transform.  ?tranform for more        
dat.new <- transform(dat, sitename.clicks=sitename-clicks,   
    impression.clicks=impression-clicks)
dat.new  #here's the new data set.  Notice it has the new and old columns.

#To get rid of the old columns you can use indexing and specify the columns you want.
dat.new[, c(1:2, 6:7)]

#We could have also done:
dat.new[, c(1,2,6,7)]
#or said the columns not wanted with negative indexing:
dat.new[, -c(3:5)]

dat正如泰勒所说,示例数据非常重要。我对你的问题的解释不同,因为我认为你的数据不同。我没有把
-
看作是数字的文字减法,而是变量的组合

DF <- expand.grid(market = LETTERS[1:5],
                  date = Sys.Date()+(0:5),
                  sitename = letters[1:2])
n <- nrow(DF)
DF$impression <- sample(100, n, replace=TRUE)
DF$clicks <- sample(100, n, replace=TRUE)
给予


列名之间有一个
\
,而不是一个
-
,但是如果需要,您可以更改它。不过,我不建议这样做,因为以后引用该列时会遇到问题,因为
-
将被视为减法(您需要引用名称)。

示例数据,正如泰勒所说,非常重要。我对你的问题的解释不同,因为我认为你的数据不同。我没有把
-
看作是数字的文字减法,而是变量的组合

DF <- expand.grid(market = LETTERS[1:5],
                  date = Sys.Date()+(0:5),
                  sitename = letters[1:2])
n <- nrow(DF)
DF$impression <- sample(100, n, replace=TRUE)
DF$clicks <- sample(100, n, replace=TRUE)
给予


列名之间有一个
\
,而不是一个
-
,但是如果需要,您可以更改它。不过,我不推荐它,因为这样以后您在引用该列时会遇到问题,因为
-
将被视为减法(您需要引用名称)。

您正在从
重塑
包中查找
重塑
或类似于
铸造
熔化
。我不熟悉SAS,所以我不确定您提供的函数的输出是什么。你能提供一个小样本的输入数据和所需的输出吗?哦,这可能是海报想要从宽到长。如果是这样的话,请忽略我的答案。@Justin看变量名你的建议最有意义,但我会推迟编辑我的答案,直到海报提供了他们所拥有和期望的数据集(或他们所拥有的数据的表示)@TylerRinker试图弄清楚他想要什么,但是SAS是难以理解的,从技术上说我应该在工作。。。你的答案和重塑套餐应该足以让他开始。你正在寻找
重塑
套餐中的
cast
melt
之类的内容。我不熟悉SAS,所以我不确定您提供的函数的输出是什么。你能提供一个小样本的输入数据和所需的输出吗?哦,这可能是海报想要从宽到长。如果是这样的话,请忽略我的答案。@Justin看变量名你的建议最有意义,但我会推迟编辑我的答案,直到海报提供了他们所拥有和期望的数据集(或他们所拥有的数据的表示)@TylerRinker试图弄清楚他想要什么,但是SAS是难以理解的,从技术上说我应该在工作。。。你的答案和重塑方案应该足以让他开始。
   market       date a_impression a_clicks b_impression b_clicks
1       A 2012-02-28           74       97           11       71
2       A 2012-02-29           34       30           88       35
3       A 2012-03-01           40       85           40       49
4       A 2012-03-02           46       12           99       20
5       A 2012-03-03            6       95           85       56
6       A 2012-03-04           61       61           42       64
7       B 2012-02-28            4       53           74        9
8       B 2012-02-29           43       27           92       59
9       B 2012-03-01           34       26           86       43
10      B 2012-03-02           81       47           84       35
11      B 2012-03-03            3        5           91       48
12      B 2012-03-04           19       26           99       21
13      C 2012-02-28           22       31          100       53
14      C 2012-02-29           40       83           95       27
15      C 2012-03-01           78       89           81       29
16      C 2012-03-02           57       55           79       87
17      C 2012-03-03           37       61            3       97
18      C 2012-03-04           83       61           41       77
19      D 2012-02-28           81       18           47        3
20      D 2012-02-29           90      100           17       83
21      D 2012-03-01           12       40           35       93
22      D 2012-03-02           85       14           63       67
23      D 2012-03-03           63       53           29       58
24      D 2012-03-04           40       79           56       70
25      E 2012-02-28           97       62           68       31
26      E 2012-02-29           24       84           17       63
27      E 2012-03-01           94       93           32        2
28      E 2012-03-02            6       26           86       26
29      E 2012-03-03          100       34           37       80
30      E 2012-03-04           89       87           72       11