如何在R中的数据帧中添加新列并使用现有列?

如何在R中的数据帧中添加新列并使用现有列?,r,R,我试图添加一个名为“已访问”的列,该列查看名为“访问”的现有列,如果“访问”=NA,则我希望“已访问”为=0,但如果“访问”>0,则“已访问”应为=1。我得到一个错误,它表示“变异中的错误(访问=if(访问=NA”){: 找不到“访问”对象。感谢您的所有建议!!这是我的代码 mutate(Visited = if(Visits == "NA") { replace("NA", 0) } else { replace(1) } )```

我试图添加一个名为“已访问”的列,该列查看名为“访问”的现有列,如果“访问”=NA,则我希望“已访问”为=0,但如果“访问”>0,则“已访问”应为=1。我得到一个错误,它表示“变异中的错误(访问=if(访问=NA”){: 找不到“访问”对象。感谢您的所有建议!!这是我的代码

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

ifelse
应该可以做到。注意:
df
可以替换为您的
dataframe
s名称:

df$Visited = ifelse(is.na(df$Visits), 0, 1)
如果您更喜欢dplyr:

library(dplyr)
df = df %>%
        mutate(Visited = ifelse(is.na(Visits), 0, 1))

ifelse
应该可以做到。注意:
df
可以替换为您的
dataframe
s名称:

df$Visited = ifelse(is.na(df$Visits), 0, 1)
如果您更喜欢dplyr:

library(dplyr)
df = df %>%
        mutate(Visited = ifelse(is.na(Visits), 0, 1))
数据:

df
数据:

df一些问题:

  • 如果在
    变异中使用
    ,则不能这样使用
    :我推断您的数据不止一行,在这种情况下
    访问==“NA”
    将是一个长度大于1的
    逻辑
    向量。
    if
    条件必须具有长度-1。您可能需要的是一个向量化条件,例如
    ifelse
    replace

    有几件事需要实现:矢量化条件不会短路(
    &
    |
    会短路,
    &
    |
    不会短路,并且您不能仅仅交换它们);与
    逻辑
    整数
    数值
    字符
    以外的类一起使用

  • 您使用的
    replace
    不正确:它需要三个参数,不能推断任何结果。您不能只使用
    replace(0)
    希望它知道在调用之外查找条件

  • R符号
    NA
    (可以是
    数字的
    逻辑的
    ,字符串等)和字符串
    “NA”
    之间有很大的区别。有时,误读数据会给你字符串
    “NA”
    ,但通常不是。请注意
    NA=.
    任何东西都会是
    NA
    (不正确/错误),因为
    NA
    可以解释为“可以是任何东西”以及“不适用”。因此,如果代码中有
    NA
    s,那么
    ==“NA”
    将首先在内部将数据强制为字符串,而不会将
    NA
    转换为
    “NA”
    ,然后查找文本“NA”
    ,而不是您想要/需要的。我希望这是有意义的

  • 错误消息表明您没有传递数据。
    mutate(Visited=…)
    如果对mutate的调用位于dplyr/magrittr“管道”(
    %%>%
    )中,则可以正常工作,但就其本身而言,
    mutate
    要求其第一个参数是
    data.frame
    ,如
    mutate(mydata,Visited=…)

  • 以下是一些适用于您的等效替代方案:

    mydata%>%
    变异(
    Visited1=ifelse(!is.na(访问量)&访问量>0,1,0),
    Visited2=replace(rep(1,n()),is.na(访问量)|访问量0)
    )
    
    第三个使用
    +(.)
    快捷方式利用R从
    逻辑
    整数
    的强制

    您可以选择您喜欢的。

    一些问题:

  • 如果在
    变异中使用
    ,则不能这样使用
    :我推断您的数据不止一行,在这种情况下
    访问==“NA”
    将是一个长度大于1的
    逻辑
    向量。
    if
    条件必须具有长度-1。您可能需要的是一个向量化条件,例如
    ifelse
    replace

    有几件事需要实现:矢量化条件不会短路(
    &
    |
    会短路,
    &
    |
    不会短路,并且您不能仅仅交换它们);与
    逻辑
    整数
    数值
    字符
    以外的类一起使用

  • 您使用的
    replace
    不正确:它需要三个参数,不能推断任何结果。您不能只使用
    replace(0)
    希望它知道在调用之外查找条件

  • R符号
    NA
    (可以是
    数字的
    逻辑的
    ,字符串等)和字符串
    “NA”
    之间有很大的区别。有时,误读数据会给你字符串
    “NA”
    ,但通常不是。请注意
    NA=.
    任何东西都会是
    NA
    (不正确/错误),因为
    NA
    可以解释为“可以是任何东西”以及“不适用”。因此,如果代码中有
    NA
    s,那么
    ==“NA”
    将首先在内部将数据强制为字符串,而不会将
    NA
    转换为
    “NA”
    ,然后查找文本“NA”
    ,而不是您想要/需要的。我希望这是有意义的

  • 错误消息表明您没有传递数据。
    mutate(Visited=…)
    如果对mutate的调用位于dplyr/magrittr“管道”(
    %%>%
    )中,则可以正常工作,但就其本身而言,
    mutate
    要求其第一个参数是
    data.frame
    ,如
    mutate(mydata,Visited=…)

  • 以下是一些适用于您的等效替代方案:

    mydata%>%
    变异(
    Visited1=ifelse(!is.na(访问量)&访问量>0,1,0),
    Visited2=replace(rep(1,n()),is.na(访问量)|访问量0)
    )
    
    第三个使用
    +(.)
    快捷方式利用R从
    逻辑
    整数
    的强制


    您可以选择您喜欢的。

    谢谢-选项B工作得很好!谢谢-选项B工作得很好!非常感谢您的详细解释!我从中学到了很多。非常感谢