使用不存在的列名称设置数据框

Sim*_*aur 2 r dataframe

我在R中有这行代码:

newDF <-oldDF[subsettingColumns]
Run Code Online (Sandbox Code Playgroud)

subsettingColumns有一些列名可能存在,也可能不存在oldDF.如果它不存在,我想要一个newDFNA's 插入同一位置的列.如何在R中使用它?

Ron*_*hah 6

我们来举个例子:

df <- data.frame(a = c(1, 2, 3, 4), b = c(4, 5, 6, 7))
df

#  a b
#1 1 4
#2 2 5
#3 3 6
#4 4 7

#Columns to take subset of
subsettingColumns <- c('a', 'd', 'e')

#Columns which are already present
cols <- subsettingColumns[subsettingColumns %in% names(df)]

#Add them in the new dataframe
newdf <- df[cols]

#Assign NA to the columns which are not defined in the original dataframe
newdf[setdiff(subsettingColumns, cols)] <- NA

newdf
#  a  d  e
#1 1 NA NA
#2 2 NA NA
#3 3 NA NA
#4 4 NA NA
Run Code Online (Sandbox Code Playgroud)


San*_*osh 5

如果function列在数据框中不存在,您可以添加列,如下所示:

AddColumn <- function(oldDF, subsettingColumns) {

  addCol <-subsettingColumns[!subsettingColumns%in%names(oldDF)]

  if(length(addCol)!=0) oldDF[addCol] <- NA
    oldDF
}
Run Code Online (Sandbox Code Playgroud)

在示例数据上测试此函数:

# Example data
oldDF <- data.frame(A = c(1, 2, 3, 4, 5), B = c(11, 12, 13, 14, 15))

AddColumn(oldDF, "testColumn")

#   A   B  testColumn
#1  1  11         NA
#2  2  12         NA
#3  3  13         NA
#4  4  14         NA
#5  5  15         NA

AddColumn(oldDF, c("testColumn1", "testColumn2")

#  A   B  testColumn1  testColumn2
#1 1  11           NA          NA
#2 2  12           NA          NA
#3 3  13           NA          NA
#4 4  14           NA          NA
#5 5  15           NA          NA
Run Code Online (Sandbox Code Playgroud)