根据列表创建新变量,然后根据行是否包含变量名进行填充

时间:2018-12-01 15:08:43

标签: r

我有一些数据:

df = data.frame(matrix(rnorm(20), nrow=10))
         X1          X2
1   1.17596402  0.06138821
2  -1.76439330  1.03674803
3  -0.39069424  0.61616793
4   0.68375346  0.27435354
5   0.27426476 -1.71226109
6  -0.06153577  1.14514453
7  -0.37067621 -0.61243104
8   1.11107852  0.47788971
9  -1.73036658  0.31545148
10 -1.83155718 -0.14433432

我想为列表中的每个元素添加新变量,该变量将更改:

list = c("a","b","c")

结果应为:

           X1          X2  a  b  c
1   1.17596402  0.06138821 NA NA NA
2  -1.76439330  1.03674803 NA NA NA
3  -0.39069424  0.61616793 NA NA NA
4   0.68375346  0.27435354 NA NA NA
5   0.27426476 -1.71226109 NA NA NA
6  -0.06153577  1.14514453 NA NA NA
7  -0.37067621 -0.61243104 NA NA NA
8   1.11107852  0.47788971 NA NA NA
9  -1.73036658  0.31545148 NA NA NA
10 -1.83155718 -0.14433432 NA NA NA

我可以使用以下建议来做到这一点:

df[list] <- NA

但是现在,我想在每一行中搜索变量名作为值,如果它包含该值,则进行标记。例如:

   X1 X2 a b c
1   a  b 1 1 0
2   a  c 1 0 1

因此,代码将在所有列中搜索“ a”,并标记是否有任何列包含“ a”。我该怎么做?

1 个答案:

答案 0 :(得分:2)

您可以使用

df[list] <- NA

结果:

            X1          X2  a  b  c
1  -2.07205164 -0.93585363 NA NA NA
2   1.11014587  0.23468072 NA NA NA
3  -1.17909665  0.04741478 NA NA NA
4   0.23955056  1.02029880 NA NA NA
5  -0.79212220 -1.13485661 NA NA NA
6  -0.57571547  0.33069641 NA NA NA
7  -0.70063920 -0.17251563 NA NA NA
8   1.90625189  0.30277177 NA NA NA
9   0.09029121 -0.72104778 NA NA NA
10 -1.36324313 -1.48041873 NA NA NA

如果只想添加df中不存在的变量,则可以使用:

df[list[!list %in% names(df)]] <- NA