如果它们不是NA,则将一列粘贴到所有其他列

Sar*_*ker 3 r dataframe

我的问题是我有一个5列的数据框,其中4列包含名称,1列包含状态.例如

   X1       X2      X3       X4       X5
1 name1     NA     name3     NA     active   
2 name1   name2     NA      name4   inactive
3 NA      name2    name3    name4   unknown
4 name1   name2     NA       NA     inactive
5 name1   name2    name3    name4   unknown
Run Code Online (Sandbox Code Playgroud)

我想做的是col X5在每个X1,X2,X3和X4之间交替,并用下划线(name1_active,name2_inactive)将它们粘贴在一起,而不考虑这些NA情况.

   X1      X5       X2      X5        X3      X5       X4       X5
1 name1  active     NA      NA      name3   active     NA       NA   
2 name1  inactive  name2  inactive   NA       NA      name4   inactive
3 NA       NA      name2  unknown   name3   unknown   name4   unknown
4 name1  inactive  name2  inactive   NA       NA       NA       NA
5 name1  unknown   name2  unknown   name3   unknown   name4   unknown
Run Code Online (Sandbox Code Playgroud)

输出:

       X1             X2                X3             X4 
1 name1_active        NA           name3_active        NA     
2 name1_inactive  name2_inactive        NA         name4_inactive
3     NA          name2_unknown    name3_unknown   name4_unknown
4 name1_inactive  name2_inactive        NA             NA   
5 name1_unknown   name2_unknown    name3_unknown   name4_unknown
Run Code Online (Sandbox Code Playgroud)

r.u*_*apr 8

尝试:

d <- read.table(text = "X1       X2      X3       X4       X5
1 name1     NA     name3     NA     active   
2 name1   name2     NA      name4   inactive
3 NA      name2    name3    name4   unknown
4 name1   name2     NA       NA     inactive
5 name1   name2    name3    name4   unknown", header = TRUE)

as.data.frame(lapply(d[, 1:4], function(x) ifelse(is.na(x), NA, paste(x, d$X5, sep = "_"))))
#              X1             X2            X3             X4
#1   name1_active           <NA>  name3_active           <NA>
#2 name1_inactive name2_inactive          <NA> name4_inactive
#3           <NA>  name2_unknown name3_unknown  name4_unknown
#4 name1_inactive name2_inactive          <NA>           <NA>
#5  name1_unknown  name2_unknown name3_unknown  name4_unknown
Run Code Online (Sandbox Code Playgroud)