【问题标题】:Making the rows of a data frame to NAs using R使用 R 将数据帧的行设置为 NA
【发布时间】:2021-06-06 23:07:15
【问题描述】:

我有一个数据框如下,

aid=c(1:10)
x1_var=rnorm(10,0,1)
x2_var=rnorm(10,0,1)
x3_var=rbinom(10,1,0.5)

data=data.frame(aid,x1_var,x2_var,x3_var)


 head(data)
  aid      x1_var     x2_var x3_var
1   1 -0.99759448 -0.2882535      1
2   2 -0.12755695 -1.3706875      0
3   3  1.04709366  0.8977596      1
4   4  0.48883458 -0.1965846      1
5   5 -0.40264114  0.2925659      1
6   6 -0.08409966 -1.3489460      1

如果x3_var==1(不将aid列为NA),我想将此数据框中的所有行完全设为NA

我尝试了以下代码。

 > data[which(data$x3_var==1),]=NA
> data
   aid      x1_var     x2_var x3_var
1   NA          NA         NA     NA
2    2 -0.12755695 -1.3706875      0
3   NA          NA         NA     NA
4   NA          NA         NA     NA
5   NA          NA         NA     NA
6   NA          NA         NA     NA
7   NA          NA         NA     NA
8    8 -1.78160459 -1.8677633      0
9    9 -1.65895704 -0.8086148      0
10  10 -0.06281384  1.8888726      0

但是这段代码已经将辅助列的值也设置为 NA。谁能帮我解决这个问题?

还有什么方法可以做同样的事情吗?

谢谢

【问题讨论】:

    标签: r dataframe dplyr na


    【解决方案1】:

    如果您从中删除 aid 列,您的代码将起作用。

    data[which(data$x3_var==1),-1]=NA
    

    没有which 也可以这样做:

    data[data$x3_var==1, -1]=NA
    

    在上述两种情况下,我假设您知道aid 列的位置,即1。如果实际上您不知道列的位置,您可以使用match 来获取它的位置。

    data[data$x3_var==1, -match('aid', names(data))] = NA
    

    【讨论】:

      【解决方案2】:

      dplyr 解决方案。假设要更改的列以“x”开头,如示例数据中所示。

      library(dplyr)
      
      set.seed(1001)
      df1 <- data.frame(aid = 1:10,
                        x1_var = rnorm(10,0,1),
                        x2_var = rnorm(10,0,1),
                        x3_var = rbinom(10,1,0.5))
      
      df1 %>% 
        mutate(across(starts_with("x"), ~ifelse(x3_var == 1, NA, .x)))
      
         aid     x1_var     x2_var x3_var
      1    1  2.1886481  0.3026445      0
      2    2 -0.1775473  1.6343924      0
      3    3         NA         NA     NA
      4    4 -2.5065362  0.4671611      0
      5    5         NA         NA     NA
      6    6 -0.1435595  0.1102652      0
      7    7         NA         NA     NA
      8    8 -0.6229437 -1.0302508      0
      9    9         NA         NA     NA
      10  10         NA         NA     NA
      

      【讨论】:

        猜你喜欢
        • 2020-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 1970-01-01
        • 2014-12-22
        相关资源
        最近更新 更多