[英]how to combine some columns?
我有3列如下:
col1 col2 col3
1 NA NA
NA 3 NA
NA NA NA
3 NA NA
我如何結合這 3 列並制作一個新列?
col1 col2 col3 new
1 NA NA 1
NA 3 NA 3
NA NA NA NA
3 NA NA 3
請注意,它們沒有交集,這意味着如果其中一個是數字 2,則其他是 NA
假設您的 dataframe 被稱為df
,
df$new <- pmin(df$col1,df$col2,df$col3,na.rm=TRUE)
應該回答你的問題。
pmin
function 獲得每行三列中的最小值,並且na.rm=TRUE
忽略 NA 值,因此如果按行您最多只有一個非 NA 值,這應該可以工作。
我們可以使用max.col
來獲取每行中的非 NA 值。
df$new <- df[cbind(seq_len(nrow(df)), max.col(!is.na(df)))]
df
# col1 col2 col3 new
#1 1 NA NA 1
#2 NA 3 NA 3
#3 NA NA NA NA
#4 3 NA NA 3
如果您連續超過 1 個不是 NA 的值,您可能需要根據您的要求查看ties.method
的max.col
。
我們也可以使用coalesce
的dplyr
library(dplyr)
df1 %>%
mutate(new = coalesce(col1, col2, col3))
# col1 col2 col3 new
#1 1 NA NA 1
#2 NA 3 NA 3
#3 NA NA NA NA
#4 3 NA NA 3
或者不指定列名
df1 %>%
mutate(new = coalesce(!!! .))
或reduce
library(purrr)
df1 %>%
mutate(new = reduce(., coalesce))
df1 <- structure(list(col1 = c(1L, NA, NA, 3L), col2 = c(NA, 3L, NA,
NA), col3 = c(NA_integer_, NA_integer_, NA_integer_, NA_integer_
)), row.names = c(NA, -4L), class = "data.frame")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.