我有一個資料框,我需要根據另一列中變數的值在不同的列中進行單個觀察。我是編程新手,很難找到我可以遵循的具體示例。當Item值為1615時,Epoch應該是261,在Item的所有其他級別,Epoch應該不會改變。資料框名稱是 myevents。下面是一個資料示例:
| 物品 | 時代 |
|---|---|
| 1612 | 260 |
| 1613 | 0 |
| 1614 | 0 |
| 1615 | 0 |
| 1616 | 0 |
| 1617 | 0 |
| 1618 | 262 |
| 1619 | 0 |
輸出應該如下所示:
| 物品 | 時代 |
|---|---|
| 1612 | 260 |
| 1613 | 0 |
| 1614 | 0 |
| 1615 | 261 |
| 1616 | 0 |
| 1617 | 0 |
| 1618 | 262 |
| 1619 | 0 |
這是我嘗試過的:
myevents$Epoch=ifelse(myevents$Item==1615, myevents$Epoch==261, myevents$Epoch==myevents$Epoch)
myevents$Epoch=ifelse(myevents$Item==1615, myevents$Epoch==261, myevents$Epoch)
myevents$Epoch <- with(myevents, ifelse(myevents$Item==1615, myevents2$Epoch==261, myevents$Epoch==myevents$Epoch))
myevents$Epoch <- with(myevents, if(myevents$Item==1615, myevents$Epoch==261))
以上都沒有奏效,有些實際上用 allTRUE或FALSEcharacters替換了列。我已確保所有數字都被視為數字,并且為了以防萬一,我確實嘗試將它們用單引號括起來。我也嘗試過if單獨使用表單,但我無法弄清楚如何以實際運行的方式使用它。任何幫助是極大的贊賞!
uj5u.com熱心網友回復:
你的代碼幾乎可以作業了。主要的混淆似乎來自使用ifelse(你有正確的直覺使用):
myevents$corrected <- ifelse(myevents$Item==1615, 261, myevents$Epoch)
或者,如果您想直接覆寫:
myevents$Epoch <- ifelse(myevents$Item==1615, 261, myevents$Epoch)
ifelse回傳一個值,我們分配給一個變數,我們不在 ifelse 陳述句本身中分配。(或者更準確地說,ifelse回傳它的第二個或第三個引數,取決于第一個引數中的比較結果)
uj5u.com熱心網友回復:
如果我很好地理解您的問題,另一種沒有 if 或 ifelse 的方法是:
myevents[myevents$Item %in% 1615,"Epoch"]= 261
uj5u.com熱心網友回復:
您已經對基本 R 的代碼有了幾個答案,所以我把它排除在我的答案之外。你當然可以使用一些你已經擁有的很棒的基本 R 答案,但這里有一些其他選項使用tidyverse.
library(tidyverse)
# random data to work with for the post
set.seed(3625) # set seed for the sample()
df <- data.frame(Item = sample(rep(1610:1620, times = 5)))
# Item
# 1 1612
# 2 1611
# 3 1616
# 4 1616
# 5 1612
# 6 1620
# 7 1618
# 8 1619
# 9 1617
# 10 1615
#... 55 rows
df <- df %>% # using ifelse
mutate(Epoch = ifelse(test = Item == 1612,
yes = 260,
no = ifelse(test = Item == 1615,
yes = 261,
no = ifelse(test = Item == 1618,
yes = 262,
no = 0))))
# Item Epoch
# 1 1612 260
# 2 1611 0
# 3 1616 0
# 4 1616 0
# 5 1612 260
# 6 1620 0
# 7 1618 262
# 8 1619 0
# 9 1617 0
# 10 1615 261
#... 55 rows
df <- df %>%
mutate(Epoch2 = case_when( # alternative to ifelse
Item == 1612 ~ 260,
Item == 1615 ~ 261,
Item == 1618 ~ 262,
TRUE ~ 0))
# Item Epoch Epoch2
# 1 1612 260 260
# 2 1611 0 0
# 3 1616 0 0
# 4 1616 0 0
# 5 1612 260 260
# 6 1620 0 0
# 7 1618 262 262
# 8 1619 0 0
# 9 1617 0 0
# 10 1615 261 261
#... 55 rows
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/316396.html
下一篇:連接時如何檢查假字串值?
