簡體   English   中英

如何在 R 的數據框中添加新列並使用現有列?

[英]How can I add a new column and use an existing column in a data frame in R?

我正在嘗試添加一個名為“已訪問”的列,該列查看名為“訪問”的現有列,如果“訪問”= NA,那么我希望“已訪問”= 0,但如果“訪問”> 0,則“已訪問”應該 = 1。我收到一條錯誤消息,指出“變異錯誤(已訪問 = if (Visits == "NA") {: object 'Visits' not found”。謝謝您的所有建議。!這是我的代碼。

mutate(Visited = 
  if(Visits == "NA") {
  replace("NA", 0)
  } else {
  replace(1)
  }
)````

一些問題:

  1. 您不能在這樣的mutate中使用if :我推斷您的數據不止一行,在這種情況下, Visits == "NA"將是一個logical向量,長度大於 1。 if條件必須具有長度- 1. 您可能需要的是矢量化條件,例如ifelsereplace

    有幾件事要實現:向量化條件不會短路( &&||短路, &|不會,你不能只是互換它們); 並且 ifelse 與logicalintegernumericcharacter以外的類ifelse問題

  2. 您對replace的使用不正確:它需要三個 arguments,它沒有任何推斷。 您不能只使用replace(0)希望它知道在其調用之外尋找條件。

  3. R 符號NA (可以是numericlogical 、 string 等)和字符串"NA"之間存在很大差異。 有時誤讀的數據會給你字符串"NA" ,但通常不是。 請注意, NA ==. 任何東西都將是NA (不是真/假),因為NA可以解釋為“可以是任何東西”以及“不適用”。 因此,如果您的代碼中有NA ,那么. == "NA" . == "NA"將首先在內部將數據強制轉換為字符串,這不會將NA轉換為"NA" ,然后查找文字"NA" ,而不是您想要/需要的。 我希望這是有道理的。

  4. 錯誤消息表明您沒有傳入data 如果對 mutate 的調用在 dplyr/magrittr“管道”( %>% )中,則mutate(Visited =...)工作正常,但mutate本身要求其第一個參數是data.frame ,如mutate(mydata, Visited=...)

以下是一些適合您的等效替代方案:

mydata %>%
  mutate(
    Visited1 = ifelse(!is.na(Visits) & Visits > 0, 1, 0),
    Visited2 = replace(rep(1, n()), is.na(Visits) | Visits <= 0, 0),
    Visited3 = +(!is.na(Visits) & Visits > 0)
  )

第三個利用 R 的強制從logicalinteger+(.)快捷方式。

你選擇你喜歡的。

ifelse應該做的伎倆。 注意: df可以替換為您的dataframe的名稱:

df$Visited = ifelse(is.na(df$Visits), 0, 1)

如果您更喜歡dplyr

library(dplyr)
df = df %>%
        mutate(Visited = ifelse(is.na(Visits), 0, 1))
library(dplyr)
df %>%
  mutate(Visited = if_else(is.na(Visits), 0, 1))
  Visits Visited
1     NA       0
2      2       1
3      1       1
4     NA       0
5      5       1 

數據:

df <- data.frame(
  Visits = c(NA, 2, 1, NA, 5)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM