检查并创建r中不存在的变量

检查并创建r中不存在的变量,r,R,根据具体情况,变量存在于“group1”或“group1”、“group2”或“group1”、group2或“group3”(这些是变量) 但是,我每次都要生成三个组变量 例如,如果我只有一个组变量“group1”,但我希望得到“group1”、“group2”和“group3”(“group2”和“group3”将是空列) 我认为检查变量名和设置不存在的变量是可行的 请告诉我如何处理此问题。NA在这种情况下填写此值似乎是合理的: df <- data.frame(id=1:10,gr

根据具体情况,变量存在于“group1”或“group1”、“group2”或“group1”、group2或“group3”(这些是变量)

但是,我每次都要生成三个组变量

例如,如果我只有一个组变量“group1”,但我希望得到“group1”、“group2”和“group3”(“group2”和“group3”将是空列)

我认为检查变量名和设置不存在的变量是可行的


请告诉我如何处理此问题。

NA
在这种情况下填写此值似乎是合理的:

df <- data.frame(id=1:10,group1=1)

vars <- c("group1","group2","group3")
df[setdiff(vars,names(df))] <- NA

#   id group1 group2 group3
#1   1      1     NA     NA
#2   2      1     NA     NA
#3   3      1     NA     NA
#4   4      1     NA     NA
#5   5      1     NA     NA
#6   6      1     NA     NA
#7   7      1     NA     NA
#8   8      1     NA     NA
#9   9      1     NA     NA
#10 10      1     NA     NA

df如果您只想在已经填充的列之外再填充一列
NA
,那么这就行了:

    cbind(id=1:10,group1=rep(1,10),data.frame(group2=NA,group3=NA))
   id group1 group2 group3
1   1      1     NA     NA
2   2      1     NA     NA
3   3      1     NA     NA
4   4      1     NA     NA
5   5      1     NA     NA
6   6      1     NA     NA
7   7      1     NA     NA
8   8      1     NA     NA
9   9      1     NA     NA
10 10      1     NA     NA
如果需要具有适当列的空数据帧,则需要使用:

    data.frame(id=integer(),group1=numeric(),group2=numeric(),group3=numeric(),stringsAsFactors=FALSE)
 id     group1 group2 group3
<0 rows> (or 0-length row.names)
data.frame(id=integer(),group1=numeric(),group2=numeric(),group3=numeric(),stringsAsFactors=FALSE)
id组1组2组3
(或长度为0的行名称)

如果你能用一个例子来解释,那就太好了。@RonakShah我添加了一个例子图像。你想让新列填充什么?它们需要有一个值,无论是
还是
NA
@richardscri,即使新列是空的。列中没有“空”这样的东西。如果里面什么都没有,我们一开始就不需要它了。每行都需要某种值。谢谢你的帮助,但这不是我的问题。并不总是有“group1”。有时是“group1”和“group2”,所以我必须创建“group3”。我将在for循环中处理这个问题,因此我无法使用您的代码创建notexist变量。@hamel-您是否尝试过该代码?如果由于
setdiff()
setdiff函数可用于非列名的元素,所以您预先存在group1/2/3的任何可能组合,则该函数可以工作。@hamel-恐怕我不知道您想要什么。这个答案符合你在问题中想要的结果,在你澄清你想要什么之前,我们都是在暗中刺伤。谢谢你的帮助,但这不是我的问题。并不总是有“group1”。有时是“group1”和“group2”,所以我必须创建“group3”。我将在for循环中进行此操作,因此我无法使用您的代码创建not exist变量。您想要什么还不清楚。
    data.frame(id=integer(),group1=numeric(),group2=numeric(),group3=numeric(),stringsAsFactors=FALSE)
 id     group1 group2 group3
<0 rows> (or 0-length row.names)