繁体   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