R 创建可以评估列并在新列中给出输出的函数

R 创建可以评估列并在新列中给出输出的函数,r,function,if-statement,R,Function,If Statement,这是我的第一个问题,所以我会尽可能详细地回答 我正在尝试创建一个函数,在该函数中,我可以根据原始列是否列出日期或是否没有值,生成一个包含“1”或“0”作为输出的新列。下面是我试图实现的一个小例子: Column 1 New Column Obs.1 4/23/2012 1 Obs.2 0 Obs.3 1/23/2016 1 我不知道该怎么做。我曾尝试将

这是我的第一个问题,所以我会尽可能详细地回答

我正在尝试创建一个函数,在该函数中,我可以根据原始列是否列出日期或是否没有值,生成一个包含“1”或“0”作为输出的新列。下面是我试图实现的一个小例子:

            Column 1      New Column
    Obs.1   4/23/2012          1
    Obs.2                      0
    Obs.3   1/23/2016          1
我不知道该怎么做。我曾尝试将
tapply()
ifelse()
结合使用,但没有任何可行的代码。这就是我想要的:

    TextToNumb <- function(df$column){
    Ifelse(df$column > 0, 1, 0)
    return(df$newcolumn
    }
TextToNumb 0,1,0)
返回(df$newcolumn)
}

非常感谢您的帮助,谢谢!

tidyverse是您的朋友

library(tidyverse) ## This will call multiple packages including dplyr
library(magrittr) ## This makes assignment back to the original dataframe by %<>%
df <- data_frame(Date = c("4/23/2012", "", "1/23/2016"))
df %<>% dplyr::mutate(Bin = ifelse(Date != "", 1, 0))

如果足以检查是否存在某些内容,则可以使用第一个代码。如果您对R比较陌生,则可以从阅读开始,这是一本很棒的书。

除了@Kim的回答之外,这可能更直接:

df <- data_frame(Date = c("4/23/2012", NA, "1/23/2016"))
df %<>% mutate(Bin = ifelse(is.na(Date), 0, 1))

df这里有一种方法是使用base
R
,利用有时有用的行为

df$is_date = as.numeric(!is.na(df$date))
我们使用向量化函数
is.na
测试
date
列中的每个元素是否为空值,这为我们提供了一个布尔/逻辑向量
TRUE
/
FALSE
。在使用
反转这些值之后,我们可以简单地将它们转换为二进制整数,使用
作为.numeric
,因为在
R中
TRUE
FALSE
实际上与1和0相同:

TRUE == 1
[1] TRUE
FALSE == 0
[1] TRUE

谢谢。我对tidyverse有点熟悉,我有dplyr、lubridate和ggplot2,但没有使用magrittr。(我从单个软件包开始,没有意识到有一整套).我对R比较陌生,目前正在参加一些数据营课程和edX统计与R课程。是否有一种方法可以根据是否存在任何值而不仅仅是日期来分配值?(例如,值345表示1,而空白表示0)?
TRUE == 1
[1] TRUE
FALSE == 0
[1] TRUE