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中表示缺少值的逻辑常量。