[英]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.