对行应用函数以替换缺失值

时间:2017-10-07 15:19:29

标签: r apply

我需要清理一个数据框:

    Sample Name` Marker `Allele 1` `Allele 2` `Allele 3` `Allele 4`
          <int>  <chr>      <int>      <int>      <int>      <int>
1             2    D13         NA        118        136         NA
2             3    D13         NA        118         NA        136
3             4    D13        118         NA         NA        136
4             5    D13         NA         NA         NA         NA
5             6    D13         NA         NA         NA         NA

所有Allele列的值应该被推到左边:

Sample Name` Marker `Allele 1` `Allele 2` `Allele 3` `Allele 4`
          <int>  <chr>      <int>      <int>      <int>      <int>
1             2    D13        118        136         NA         NA
2             3    D13        118        136         NA         NA 
3             4    D13        118        136         NA         NA
4             5    D13         NA         NA         NA         NA
5             6    D13         NA         NA         NA         NA

我正在尝试使用此功能,但我不确定如何将新向量附加到df:

apply(dff[3:6], 1, function(x) 
  x <-x[!is.na(x)]
  )

数据:

structure(list(`Sample Name` = 2:6, Marker = c("D13", "D13", 
"D13", "D13", "D13"), `Allele 1` = c(NA, NA, 118L, NA, NA), `Allele 2` = c(118L, 
118L, NA, NA, NA), `Allele 3` = c(136L, NA, NA, NA, NA), `Allele 4` = c(NA, 
136L, 136L, NA, NA)), .Names = c("Sample Name", "Marker", "Allele 1", 
"Allele 2", "Allele 3", "Allele 4"), row.names = c(NA, -5L), class = c("tbl_df", 
"tbl", "data.frame"))

1 个答案:

答案 0 :(得分:1)

我们需要的是非NA元素和NA元素的串联

df[3:6] <- t(apply(df[3:6], 1, function(x) c(x[!is.na(x)], x[is.na(x)])))