【问题标题】:R: Merging multiple variables into one (some overlaps)R:将多个变量合并为一个(一些重叠)
【发布时间】:2018-11-29 11:37:31
【问题描述】:

我正在尝试将数据集中的多行合并为一个。我想在数据可用的地方填写 NA,但在多个条目可用时保留各种条目。

数据结构如下:

data.frame(ID = c(1,2,3,4), D_1=c("data1",NA,NA,"data1"), D_2= 
c(NA,"data2",NA,NA), D_3 = c("data3",NA,"data3",NA), D_4 = 
c("data4","data4",NA,"data4"), FACT = c("A","B","C","D"))

我发现工作的方法要求列是字符列,所以(我的列也是字符):

 dat$D_1 <- as.character(dat$D_1)
 dat$D_2 <- as.character(dat$D_2)
 dat$D_3 <- as.character(dat$D_3)
 dat$D_4 <- as.character(dat$D_4)

期望的输出: 我想要一列,我们称它为“D”,它将包含所有可用数据:

Dat$D = (`data1, data3, data4`, `data2, data4`, `data3`, `data1, data4`)

我用过:

 library(dplyr) 

 dat <- dat %>%
 mutate(D = coalesce(D_1, D_2, D_3, D_4))

这是结果:

 dat$D = (data1, data2, data3, data1)

我也尝试过 tidyverse 的函数,但没有成功:

 library(tidyverse)
 dat <- dat1 %>% gather(2, 3) %>%
   filter(value) %>%
   group_by(name) %>%
   summarise(color=paste(key,collapse=",")) %>%
   right_join(dat1)

这给了我一个错误:

 Error in filter_impl(.data, quo) : 
 Evaluation error: object 'value' not found.
 In addition: Warning message:
 attributes are not identical across measure variables;
 they will be dropped 

也试过了:

D <- with(dat, pmax(D_1, D_2, D_3, D_4))

结果列包含所有 NA

谢谢

【问题讨论】:

  • apply(dat[, 2:5], 1, FUN = function(x) toString(na.omit(x))) ?
  • 它确实有效。谢谢!

标签: r merge dplyr multiple-columns


【解决方案1】:
df = data.frame(
  ID = c(1, 2, 3, 4),
  D_1 = c("data1", NA, NA, "data1"),
  D_2 = c(NA, "data2", NA, NA),
  D_3 = c("data3", NA, "data3", NA),
  D_4 = c("data4", "data4", NA, "data4"),
  FACT = c("A", "B", "C", "D"),
  stringsAsFactors = FALSE # initial conversion to characters
)

df
#   ID   D_1   D_2   D_3   D_4 FACT
# 1  1 data1  <NA> data3 data4    A
# 2  2  <NA> data2  <NA> data4    B
# 3  3  <NA>  <NA> data3  <NA>    C
# 4  4 data1  <NA>  <NA> data4    D

uniqueData <- unique(c(df$D_1, df$D_2, df$D_3, df$D_4)) # concatenation in vector

uniqueData
# [1] "data1" NA      "data2" "data3" "data4"

uniqueDataNoNA <- uniqueData[!is.na(uniqueData)] # NA removing

uniqueDataNoNA
# [1] "data1" "data2" "data3" "data4"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多