Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R.如何创建新列,基于R中的另一列返回i_R - Fatal编程技术网

R.如何创建新列,基于R中的另一列返回i

R.如何创建新列,基于R中的另一列返回i,r,R,我有一个数据帧 employee <- c('John Doe','Peter Gynn','Jolie Hope') salary <- c(21000, NA, 26800) startdate <- as.Date(c('2010-11-1', NA,'2007-3-14')) employ.data <- data.frame(employee, salary, startdate) 任何帮助都将不胜感激。尝试将其矢量化,并使用ifelse语句: employ

我有一个数据帧

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, NA, 26800)
startdate <- as.Date(c('2010-11-1', NA,'2007-3-14'))

employ.data <- data.frame(employee, salary, startdate)

任何帮助都将不胜感激。

尝试将其矢量化,并使用
ifelse
语句:

employ.data <- data.frame(employee, salary, startdate, stringsAsFactors = F)
employ.data["missing"] = with(employ.data, ifelse(is.na(startdate), employee, NA))
employ.data
    employee salary  startdate    missing
1   John Doe  21000 2010-11-01       <NA>
2 Peter Gynn     NA       <NA> Peter Gynn
3 Jolie Hope  26800 2007-03-14       <NA>
上面的构造将为您提供布尔值。若您想获得一列名称,可以将其与
ifelse
组合使用

更一般地说,首先实例化一个列,然后在数据帧中循环填充它并不是特别的
Rtistic
,我建议尽可能避免这种策略。
apply
-函数系列非常强大,
ifelse
也非常强大
dplyr
mutate
case_结合使用时
stations也可以用于您想要更像SQL的情况

出于迂腐的原因,以下是您的工作版本代码。请不要使用它,只是试着理解它们的区别

employ.data$missing = NA 
for (i in 1:nrow(employ.data)) {
  if (is.na(employ.data$startdate[i])){ 
         employ.data$missing[i] <- employ.data$employee[i]
        }
}
employ.data$missing=NA
适用于(i/1:nrow(雇佣数据)){
如果(is.na(employ.data$startdate[i]){

employ.data$missing[i]尝试将其矢量化,并使用
ifelse
语句:

employ.data <- data.frame(employee, salary, startdate, stringsAsFactors = F)
employ.data["missing"] = with(employ.data, ifelse(is.na(startdate), employee, NA))
employ.data
    employee salary  startdate    missing
1   John Doe  21000 2010-11-01       <NA>
2 Peter Gynn     NA       <NA> Peter Gynn
3 Jolie Hope  26800 2007-03-14       <NA>
上面的构造将为您提供布尔值。如果您想获得一列名称,可以将其与
ifelse
组合

更一般地说,先实例化一个列,然后在数据帧中循环填充它不是特别的
Rtistic
,我建议尽可能避免这种策略。
apply
-函数家族非常强大,而
ifelse
也非常强大。
dplyr
mutate
case_结合使用时
stations也可以用于您想要更像SQL的东西的情况

出于迂腐的原因,这是您的工作版本代码。请不要使用它,请尝试理解其中的差异

employ.data$missing = NA 
for (i in 1:nrow(employ.data)) {
  if (is.na(employ.data$startdate[i])){ 
         employ.data$missing[i] <- employ.data$employee[i]
        }
}
employ.data$missing=NA
适用于(i/1:nrow(雇佣数据)){
如果(is.na(employ.data$startdate[i]){

employ.data$missing[i]您需要
complete.cases()
从基本R-

employ.data$missingFlag <- !complete.cases(employ.data)

    employee salary  startdate missingFlag
1   John Doe  21000 2010-11-01       FALSE
2 Peter Gynn     NA       <NA>        TRUE
3 Jolie Hope  26800 2007-03-14       FALSE

employ.data$missingFlag您需要
complete.cases()-

employ.data$missingFlag <- !complete.cases(employ.data)

    employee salary  startdate missingFlag
1   John Doe  21000 2010-11-01       FALSE
2 Peter Gynn     NA       <NA>        TRUE
3 Jolie Hope  26800 2007-03-14       FALSE

employ.data$missingFlag使用dplyr可以非常轻松地完成:

library(dplyr)

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, NA, 26800)
startdate <- as.Date(c('2010-11-1', NA,'2007-3-14'))

employ.data <- data.frame(employee, salary, startdate)

employ.data <- employ.data %>% 
  rowwise() %>% 
  mutate(missing = any(is.na(c(salary, startdate))))
库(dplyr)

员工使用dplyr可以非常轻松地完成:

library(dplyr)

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, NA, 26800)
startdate <- as.Date(c('2010-11-1', NA,'2007-3-14'))

employ.data <- data.frame(employee, salary, startdate)

employ.data <- employ.data %>% 
  rowwise() %>% 
  mutate(missing = any(is.na(c(salary, startdate))))
库(dplyr)

对于初学者来说,在
if
语句中,它应该是
=
,而不是
=
NA
对于列变量来说是一个非常糟糕的名字,因为
NA
是R中表示缺少值的逻辑常量。对于初学者来说,在
if
语句中,它应该是
=
,而不是
=/code>也
NA
对于列变量来说是一个非常糟糕的名称,因为
NA
是R中表示缺少值的逻辑常量。