簡體   English   中英

合並R中數據框的列

[英]Merging columns of a dataframe in R

我有以下數據框,

c1 <- c(1,2,"<NA>","<NA>")
c2 <- c("<NA>","<NA>",3,4)
df <- data.frame(c1,c2)

>df 

    c1   c2
1    1 <NA>
2    2 <NA>
3 <NA>    3
4 <NA>    4

以下是我合並第1,2列后想要獲得的期望輸出

  >df 

    c1  
1    1 
2    2
3    3
4    4

我試過了,

df <- mutate(df, x =paste(c1,c2))

這使

> df
    c1   c2      x
1    1 <NA> 1 <NA>
2    2 <NA> 2 <NA>
3 <NA>    3 <NA> 3
4 <NA>    4 <NA> 4

有人可以提供有關如何獲得所需輸出的建議嗎?

一種方法是:

c1 <- c(1, 2, NA, NA)
c2 <- c(NA, NA, 3, 4)
df <- data.frame(c1, c2)

df2 <- data.frame(
  c1 = ifelse(is.na(df$c1), df$c2, df$c1)
)

#df2
#  c1
#1  1
#2  2
#3  3
#4  4

您很近,但是您要將兩個字符串粘貼在一起,其中一個使用尖括號中的字符串NA表示什么,如果您將字符串粘貼在一起並且不希望某個字符串出現在粘貼的字符串中,則需要將其設置為零長度字符串。 您可以使用dplyrrecode命令執行此操作。

您可以將代碼修改為:

library(dplyr)
df <- mutate(df, x =paste0(recode(c1,"<NA>" = ""),recode(c2,"<NA>" = "")))

使用dplyrtidyverse另一種方式:

df2 <- df %>% 
    mutate(c3 = if_else(is.na(c1),c2,c1)) %>% 
    select(-c1, -c2) %>% # Given you only wanted one column
    rename(c1 = c3) # Given you wanted the column to be called c1

輸出:

  c1
1  1
2  2
3  3
4  4

您可以使用rowSums

data.frame(c1 = rowSums(df,na.rm = TRUE))
#   c1
# 1  1
# 2  2
# 3  3
# 4  4

由於數據框似乎實際上包含NA值而不是'<NA>'字符串,所以我建議使用coalesce

c1 <- c(1,2,NA, NA)
c2 <- c(NA, NA,3,4)
df <- data.frame(c1,c2)

library(tidyverse)
df %>% 
  mutate(c3=coalesce(c1, c2))

輸出:

   c1 c2 c3
1  1 NA  1
2  2 NA  2
3 NA  3  3
4 NA  4  4

暫無
暫無

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

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