【问题标题】:Create new variables based on list, then populate based on whether row contains variable name [duplicate]根据列表创建新变量,然后根据行是否包含变量名称进行填充[重复]
【发布时间】:2018-12-01 15:08:43
【问题描述】:

我有一些数据:

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”。我该怎么做?

【问题讨论】:

  • 但现在,我想在每一行中搜索变量名作为值,并标记它是否包含该值。 这是一个完全不同的问题。你应该问一个单独的问题,并附上这个问题的链接。我会投票决定关闭。

标签: r


【解决方案1】:

你可以使用

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

【讨论】:

  • 谢谢。我已经更新了问题以包含您的解决方案,并更清楚地阐明了我的第二个问题,即每个新变量必须取值 1,0 以等待变量名称是否在行中。新的例子应该澄清这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2021-01-02
  • 2021-12-03
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
相关资源
最近更新 更多