繁体   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