我對 R 比較陌生,并且在資料整理中苦苦掙扎。我有一個問題,我找不到答案,但也許我在搜索錯誤的術語。
我有一個df_samples格式如下的表():
| 物種 | 性別 | 團體 | 樣品1 | 樣品2 | 樣本 n |
|---|---|---|---|---|---|
| 企鵝 | 米 | 一世。 | 20 | 21 | n |
| 企鵝 | F | 一世。 | 不適用 | 18 | n |
| 獅子 | 米 | ii. | 5 | 4 | n |
| 獅子 | F | ii. | 2 | 9 | n |
| 企鵝 | F | ii. | 22 | 不適用 | n |
| 老虎 | 米 | ii. | 7 | 6 | n |
| 老虎 | F | ii. | 6 | 8 | n |
現在,這里的問題是第 ii 組的企鵝。這是錯誤的,應該是我。在我的表中有數百種不同的物種和樣品。我有幾行有這個問題,其中物種有錯誤的組。
我能夠使用以下代碼找到存在問題的特定行:
n_occur <- data.frame(table(df_samples$species))
df_samples_2 <- df_samples[df_samples$species %in% n_occur$Var1[n_occur$Freq > 2],]
這給了我有問題的行,我可以在自己的資料框中查看它們。在那里,我能夠識別有錯誤的行并可以糾正它們。但是我遇到了兩個問題。
首先,我不知道如何索引有問題的值以直接在我的原始資料框中進行更改。
其次,我不知道如何將存盤在錯誤行中的資料帶到“正確”行。
我敢肯定,網上有答案,但我真的很難以某種方式表達我的問題,這讓我可以找到它們。
如果有人能夠通過指出如何搜索或解決問題來提供幫助,我將不勝感激。
uj5u.com熱心網友回復:
有幾種方法。
假設所有物種都有相同的群體
如果所有物種都屬于同一組,則可以使用存盤species和group資訊的向量來替換當前組。
同樣,這將替換同一ALL 中的 ALL 。groupspecies
堿基R
correct_group <- c("penguin" = "i.", "tiger" = "ii.", "lion" = "ii.")
df$group <- correct_group[match(df$species, names(correct_group))]
dplyr
library(dplyr)
df %>% mutate(group = correct_group[match(species, names(correct_group))])
如果您手動操作:
如果物種不屬于同一組,我們也可以一一做(只有當你有幾個記錄要更改時)。
species首先確定“penguin”和group“ii.”所在的行索引。這是您要更改的記錄。然后只需將group值替換為“i.”。
堿基R
df[which(df$species == "penguin" & df$group == "ii."), "group"] <- "i."
dplyr
library(dplyr)
df %>% mutate(group = ifelse(species == "penguin" & group == "ii.", "i.", group))
輸出
上述所有方法都產生相同的輸出。
species gender group sample1 sample2 sample.n
1 penguin m i. 20 21 n
2 penguin f i. NA 18 n
3 lion m ii. 5 4 n
4 lion f ii. 2 9 n
5 penguin f i. 22 NA n
6 tiger m ii. 7 6 n
7 tiger f ii. 6 8 n
請記住,對于dplyr方法,您必須將其“保存”df回它(df <- df %>% dplyr::method),否則,它只會將結果輸出到控制臺而不實際更改任何內容。
uj5u.com熱心網友回復:
使用您的流程,您可以嘗試以下步驟。
向行添加唯一 ID,以便以后過濾。
df_samples<-df_samples %>%
rowid_to_column()
根據 df_samples_2 中的 rowid 從 df_samples 中洗掉問題行
df_samples<-df_samples[-df_samples_2$rowid,]
根據您的要求更新 df_samples_2,根據 rowid 逐行變異。
將更正的行合并回 df_samples
df_samples<-bind_rows(df_samples,df_samples_2)
此外,如果您的最終目標和資料如上所述,您也可以在原始 df_samples 上嘗試此操作
df_samples <-df_samples %>%
group_by(species) %>% #this will create internal groups
arrange(species,group) %>% # Will ensure i. will be before ii.
mutate(group=lag(group,default=first(group))) # lag() will copy earlier row values to current row per group.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/427583.html
上一篇:資料框-如何對分組資料框執行操作
下一篇:根據另一列的條件僅替換列的某些值
