![](/img/trans.png)
[英]How to create a new column containing two factor levels in the length of factor levels from another column?
[英]Create a new column based on factor levels of another column
我正在嘗試在我的數據框中生成一個列,讓我們說它被稱為“狀態”,它應該提供魚的狀態,即受保護或不受保護。
我在找什么:
ID Species Status
1 1 Epinephelus polyphekadion Protected
2 2 Epinephelus tukula Protected
3 3 Thunnus albacares Protected
4 4 Sphyraena barracuda Unprotected
5 5 Lutjanus rivulatus Unprotected
6 6 Lethrinus lentjan Unprotected
7 7 Plectropomus pessuliferus Protected
我的數據:
fishydata <- structure(list(ID = 1:7, Species = structure(c(1L, 2L, 7L, 6L,4L, 3L, 5L), .Label = c("Epinephelus polyphekadion", "Epinephelus tukula","Lethrinus lentjan", "Lutjanus rivulatus", "Plectropomus pessuliferus","Sphyraena barracuda", "Thunnus albacares"), class = "factor"), .Names = c("ID", "Species"), row.names = c(NA, 7L), class = "data.frame")
該數據集包含超過1000個觀測值。 他們的一行代碼可以將特定物種鏈接到新列中的狀態。
我有超過40種,7種受到保護。 我希望為7種物種提供“受保護”狀態,並將其他所有物種視為“未受保護”而不是輸入所有物種名稱並將其歸類為“未受保護”
任何指針或建議將不勝感激。 我的技能是基本的,試圖回到R.我一直在使用變異和過濾器涉及dplyr,但我已經到了一堵磚牆。
沒有狀態列的數據:
fishydata2 <- structure(list(ID = 1:7,
Species = structure(c(1L, 2L, 7L, 6L,4L, 3L, 5L),
.Label = c("Epinephelus polyphekadion", "Epinephelus tukula","Lethrinus lentjan", "Lutjanus rivulatus", "Plectropomus pessuliferus","Sphyraena barracuda", "Thunnus albacares"), class = "factor")
),
.Names = c("ID", "Species"),
row.names = c(NA, 7L),
class = "data.frame")
# ID Species
#1 1 Epinephelus polyphekadion
#2 2 Epinephelus tukula
#3 3 Thunnus albacares
#4 4 Sphyraena barracuda
#5 5 Lutjanus rivulatus
#6 6 Lethrinus lentjan
#7 7 Plectropomus pessuliferus
您只需創建一個默認情況下具有不受保護狀態的新列:
fishydata2$Status <- "Unprotected"
現在,只需為您的7種受保護物種更新它:
fishydata2[fishydata2$Species %in% c('Epinephelus polyphekadion',
'Epinephelus tukula','Thunnus albacares',
'Plectropomus pessuliferus'),]$Status <- "Protected"
結果:
fishydata2
#ID Species Status
#1 1 Epinephelus polyphekadion Protected
#2 2 Epinephelus tukula Protected
#3 3 Thunnus albacares Protected
#4 4 Sphyraena barracuda Unprotected
#5 5 Lutjanus rivulatus Unprotected
#6 6 Lethrinus lentjan Unprotected
#7 7 Plectropomus pessuliferus Protected
如果您只是想知道如何對數據框進行子集化以便您只擁有值為Protected的行,則有以下兩個選項:
用dplyr
filter(fishydata, Status == "Protected")
# ID Species Status
# 1 1 Epinephelus polyphekadion Protected
# 2 2 Epinephelus tukula Protected
# 3 3 Thunnus albacares Protected
# 4 7 Plectropomus pessuliferus Protected
基礎
fishydata[fishydata$Status == "Protected",]
# ID Species Status
# 1 1 Epinephelus polyphekadion Protected
# 2 2 Epinephelus tukula Protected
# 3 3 Thunnus albacares Protected
# 7 7 Plectropomus pessuliferus Protected
這兩個選項都將生成一個數據幀,該數據幀只包含與受保護物種相對應的行。 如果您想稍后使用它,可以將其分配給protected_fish
,例如, protected_fish <- filter(fishydata, Status == "Protected")
。 我建議不要在fishydata
中創建一個新列,其中只包含具有受保護狀態的物種。 您已經擁有數據框中的所有信息。 如果您只想查看Species名稱,可以將其作為帶有protected_fish$Species
的向量提取,或者使用像filter(fishydata, Status == "Protected") %>% select(Species)
這樣的管道命令filter(fishydata, Status == "Protected") %>% select(Species)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.