[英]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.na
和ifelse
將NA
轉換為空字符串,然后使用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
這是使用dplyr
和reshape2
另一種方法:
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.