如何基于另一个变量的值创建一个新变量?

时间:2019-07-17 13:26:13

标签: r dataframe

我有一个向量,该向量包含表示应该在最终df中的变量名称的字符串。这些名称可能会根据其他条件每次更改。

x <- colnames(df)

y <- c("blue", "yellow", "red")

z <- setdiff(y,x)

让我们说我现在的结果是:z = c("blue", "red")

我想要一个函数,if的向量y的任何元素从z中丢失,THEN,该函数将在df上创建一列,其元素为变量名。 / p>


这是我不确定的尝试:

if (length(z) > 0) {
  for (i in z) {
   df$i <- NA
  }
}

我不知道该怎么做的部分是传递i作为在df上创建新变量的参数。 在我的示例中:我最终应该将df$yellow作为df的新变量。


我检查了很多帖子,或者我不了解它是如何工作的,或者他们没有按照我的需要做事,有的仅供参考:

2 个答案:

答案 0 :(得分:1)

这是没有任何循环的一种可能性:

df <- data.frame(x = 1:5)
z <- c("blue", "red")

df[z] <- NA_character_

  x blue red
1 1   NA  NA
2 2   NA  NA
3 3   NA  NA
4 4   NA  NA
5 5   NA  NA

答案 1 :(得分:0)

解决方案的确是@akrun的简单建议:

  

您可以使用[代替$,即df [z] <-NA可复制的mtcars [z] <-NA;头(mtcars)

因此,如下:

 if (length(z) > 0) {
  for (i in z) {
   df[i] <- NA
  }
}