R 有条件地创建新列

R 有条件地创建新列,r,if-statement,dataframe,R,If Statement,Dataframe,我相当肯定这是一个非常明显的问题,但我想不出来 假设我有以下数据集: test <- data.frame(A = c(1:10), B = c(1:10), C = c(1:10), P = c(1:10)) test您必须从函数返回一个值,然后将该值分配给对象。与许多其他语言不同,R不会就地修改对象,至少在没有大量工作的情况下是这样 Clean <- function(data) { if("P" %in% col

我相当肯定这是一个非常明显的问题,但我想不出来

假设我有以下数据集:

test <- data.frame(A = c(1:10),
              B = c(1:10), C = c(1:10),
              P = c(1:10))

test您必须从函数返回一个值,然后将该值分配给对象。与许多其他语言不同,R不会就地修改对象,至少在没有大量工作的情况下是这样

Clean <- function(data) {
    if("P" %in% colnames(data)) {        
        data$Z <- NA
    } else {
        cat("doobedooo"
    }
    return(data)
}
test <- Clean(test)

Clean您必须从函数返回一个值,然后将该值分配给对象。与许多其他语言不同,R不会就地修改对象,至少在没有大量工作的情况下是这样

Clean <- function(data) {
    if("P" %in% colnames(data)) {        
        data$Z <- NA
    } else {
        cat("doobedooo"
    }
    return(data)
}
test <- Clean(test)

Clean@HongOi答案是您问题的直接答案。我的是解决你问题的最好办法。由于要创建其他列的组合,因此可以使用
transform
(或
中的
),例如:

if('P' %in% colnames(test))
     test <- transform(test,Z={## you can put any statement here
                               x=P+1
                               x^2
                               round(x/12,2)
                             }
                          )

 head(test)
  A B C P    Z
1 1 1 1 1 0.17
2 2 2 2 2 0.25
3 3 3 3 3 0.33
4 4 4 4 4 0.42
5 5 5 5 5 0.50
6 6 6 6 6 0.58
if('P'%in%colnames(test))

测试@HongOi答案是你问题的直接答案。我的是解决你问题的最好办法。由于要创建其他列的组合,因此可以使用
transform
(或
中的
),例如:

if('P' %in% colnames(test))
     test <- transform(test,Z={## you can put any statement here
                               x=P+1
                               x^2
                               round(x/12,2)
                             }
                          )

 head(test)
  A B C P    Z
1 1 1 1 1 0.17
2 2 2 2 2 0.25
3 3 3 3 3 0.33
4 4 4 4 4 0.42
5 5 5 5 5 0.50
6 6 6 6 6 0.58
if('P'%in%colnames(test))

前面的答案已经给出了你所需要的一切。然而,还有另一种方法来解决这些问题。在
R
中,您可以使用
environment
通过引用来设置和添加数据,而不是返回整个表(即使您更改了其中的一部分)


env前面的答案已经给出了您所需要的一切。然而,还有另一种方法来解决这些问题。在
R
中,您可以使用
environment
通过引用来设置和添加数据,而不是返回整个表(即使您更改了其中的一部分)

env