2013-10-11 5 views
2

У меня возникли проблемы с настройкой sapply. У меня есть цикл for, который будет выполнять работу, в которой я нуждаюсь, но это слишком долго, чтобы завершить его.длинный формат данных в широком формате (попытка для цикла) Можно ли использовать sapply?

имена переменного объяснили:

dat #raw data 
df #empty data frame to preallocate memory 
uniq.user #unique user id 
uniq.item #unique item id 

имен столбцов для ДФА: идентификатор пользователя, идентификатор товара 1, идентификатор товара 2, ..., идентификатор товара н

Я пытаюсь создать двоичный файл таблицу, указывающую, какой элемент принадлежит пользователю.
Пример:

USERID1111 1 0 0 0 1 
USERID2222 0 1 0 1 1 

Необработанные данные выглядит следующим образом:

USERID1111 ITEM ID 1 
USERID1111 ITEM ID 5 
USERID2222 ITEM ID 2 
USERID2222 ITEM ID 4 
USERID2222 ITEM ID 5 

для цикла у меня есть:

for(i in 1:length(uniq.user)){ 
    df[i, which(uniq.item %in% dat[df[i,1]== dat[,1], 2]) + 1] <- 1 
} 

Как бы преобразовать это с помощью sapply? (или любые другие применяемые функции)

Спасибо!

p.s. Если есть более эффективные способы выполнения этой задачи, пожалуйста, дайте мне знать! Я пытаюсь узнать более эффективные способы сделать вещи в R.

+0

Может кто-то дать краткое объяснение, почему это downvoted? Я хочу, чтобы в будущем я мог сформулировать вопрос лучше. Спасибо! – chungsangh

+1

Я, конечно, не думаю, что он заслуживает нисходящего звена, но в следующий раз самый лучший способ опубликовать данные для вопросов R - это использовать 'dput', чтобы люди могли копировать/вставлять их в свою сессию R. См. [Этот вопрос] (http://stackoverflow.com/q/5963269/903061) для более подробной информации. – Gregor

+0

ах, это очень хорошо знать. Спасибо – chungsangh

ответ

3

Может быть table может быть альтернативой:

# some data 
df <- data.frame(id = c(1, 1, 2, 2, 2), item = c(1, 5, 2, 4, 5)) 

# define possible levels of 'item', so that also levels with zero count appear in table 
df$item <- factor(df$item, levels = 1:5) 

# make table 
with(df, table(id, item)) 
#  item 
# id 1 2 3 4 5 
# 1 1 0 0 0 1 
# 2 0 1 0 1 1 
+0

ах, таблица функция будет я думаю. Почему она завернута в()? Не могли бы вы немного объяснить эту часть? – chungsangh

+0

Я рад объяснить 'with', но сначала я предлагаю вам ознакомиться с текстом справки ('? With'). Я чувствую, что это было бы несправедливо по отношению к такой приятной функции, если я попытаюсь объяснить это всего несколькими словами в комментарии. – Henrik

+0

Это довольно крутая функция. Я не уверен, понимаю ли я разницу между 'with' и' inside' – chungsangh

 Смежные вопросы

  • Нет связанных вопросов^_^