Позвольте мне начать с приветствия 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)]
РЕДАКТИРОВАТЬ Рассматривая комментарии Брайана и переменные, я бы подумал, что трансформация в длинную и широкую - это то, чего желает плакат. Я, вероятно, подхожу к нему, используя пакет reshape2 от Wickham, так как с этим методом мне легче работать, и я думаю, что он будет проще и для новичка в R. Однако вот базовый способ сделать длинный и широкий формат, используя тот же набор данных, который предоставил Брайан:
wide <- reshape(DF, v.names=c("impression", "clicks"), idvar=c("market", "date"),
timevar="sitename", direction="wide")
reshape(wide)
Функция изменения формы очень гибкая, но требует некоторого привыкания для правильного использования. Я также оставляю свой предыдущий ответ, чтобы сохранить историю этого поста, хотя теперь я считаю, что это не цель постеров. Это служит напоминанием о том, что воспроизводимый пример очень помогает обеспечить ясность вашего запроса.