[英]How to add a new column in data frame by dividing values in an existing column, specifically, in the same existing column?
[英]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)
}
)````
一些問題:
您不能在這樣的mutate
中使用if
:我推斷您的數據不止一行,在這種情況下, Visits == "NA"
將是一個logical
向量,長度大於 1。 if
條件必須具有長度- 1. 您可能需要的是矢量化條件,例如ifelse
或replace
。
有幾件事要實現:向量化條件不會短路( &&
和||
會短路, &
和|
不會,你不能只是互換它們); 並且 ifelse 與logical
、 integer
、 numeric
和character
以外的類ifelse
問題。
您對replace
的使用不正確:它需要三個 arguments,它沒有任何推斷。 您不能只使用replace(0)
希望它知道在其調用之外尋找條件。
R 符號NA
(可以是numeric
、 logical
、 string 等)和字符串"NA"
之間存在很大差異。 有時誤讀的數據會給你字符串"NA"
,但通常不是。 請注意, NA ==.
任何東西都將是NA
(不是真/假),因為NA
可以解釋為“可以是任何東西”以及“不適用”。 因此,如果您的代碼中有NA
,那么. == "NA"
. == "NA"
將首先在內部將數據強制轉換為字符串,這不會將NA
轉換為"NA"
,然后查找文字"NA"
,而不是您想要/需要的。 我希望這是有道理的。
錯誤消息表明您沒有傳入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 的強制從logical
到integer
與+(.)
快捷方式。
你選擇你喜歡的。
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.