我的數據表df
有一個subject
列(例如「SubjectA」,「SubjectB」,...)。每個主題回答很多問題,並且表格是長格式的,所以每個主題有很多行。主題欄是一個因素。我想創建一個新列 - 將其稱爲subject.id
- 這只是subject
的數字版本。因此對於所有具有「SubjectA」的行,它將是1;對於所有具有「SubjectB」的行,它將是2;等等使用dplyr進行簡單突變會導致「錯誤的結果大小」錯誤
我知道一個簡單的方法來做到這一點與dplyr
將撥打df %>% mutate(subject.id = as.numeric(subject))
。但我試圖做這樣說:
subj.list <- unique(as.character(df$subject))
df %>% mutate(subject.id = which(as.character(subject) == subj.list))
而且我得到這個錯誤:
Error: wrong result size (12), expected 72 or 1
爲什麼會出現這種情況?我對解決這個問題的其他方法並不感興趣。相反,我擔心我無法理解這個錯誤反映了對dplyr
或mutate
的深刻誤解。我的理解是,這個電話應該在概念上相當於:
df$subject.id <- NULL
for (i in 1:nrow(df)) {
df$subject.id[i] <- which(as.character(df$subject[i]) == subj.list))
}
但後者的工作,前者不。爲什麼?
重複的例子:
df <- InsectSprays %>% rename(subject = spray)
subj.list <- unique(as.character(df$subject))
# this works
df$subject.id <- NULL
for (i in 1:nrow(df)) {
df$subject.id[i] <- which(as.character(df$subject[i]) == subj.list)
}
# but this doesn't
df %>% mutate(subject.id = which(as.character(subject) == subj.list))
感謝您的答覆。我知道還有其他方法可以解決特定的問題,但我的問題是爲什麼我提出的方法不起作用。我擔心我對「mutate」或「dplyr」有一些深刻的誤解。 –
@AdamMorris啊,嗯。我無法正確回答!希望有人能幫忙! – Rahul