簡體   English   中英

合並具有NA值的列

[英]merge columns with NA values

有沒有辦法將colums與NA值合並?

例如

a <- data.frame(x1 = c("a", NA, NA), y1 = c(NA, "e1", NA), z1 = c("g", NA, "i"), x2 = c(NA, "b", NA), y2 = c("d", "e2", "f"), z2 = c(NA, "h", NA), x3 = c(NA, NA, "c"))

    x1   y1   z1   x2 y2   z2   x3
1    a <NA>    g <NA>  d <NA> <NA>
2 <NA>   e1 <NA>    b e2    h <NA>
3 <NA> <NA>    i <NA>  f <NA>    c

期望的輸出是

     x       y    z
1    a       d    g
2    b   e1 e2    h
3    c       f    i

您可以使用is.naifelseNA轉換為空字符串,然后使用paste合並列,使用trimws刪除前導和尾隨空格:

a <- data.frame(x1 = c("a", NA, NA), y1 = c(NA, "e1", NA), z1 = c("g", NA, "i"), x2 = c(NA, "b", NA), y2 = c("d", "e2", "f"), z2 = c(NA, "h", NA), x3 = c(NA, NA, "c"), 
                stringsAsFactors = FALSE)
a2 <- lapply(a, function(x) ifelse(is.na(x),"",x))
data.frame(x=trimws(paste(a2$x1,a2$x2,a2$x3)),
                 y=trimws(paste(a2$y1,a2$y2)), 
                 z=trimws(paste(a2$z1,a2$z2)))
  x     y z
1 a     d g
2 b e1 e2 h
3 c     f i

這是使用dplyrreshape2另一種方法:

library(reshape2)
library(dplyr)
melt(as.matrix(a)) %>%
  filter(!is.na(value)) %>%
  group_by(Var1, g=substr(Var2, 1, 1)) %>%
  summarise(value=paste(value, collapse=" ")) %>%
  dcast(Var1 ~ g, value.var="value") %>%
  select(-Var1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM