【问题标题】:Merging columns in R (dplyr or any other package) [duplicate]合并R中的列(dplyr或任何其他包)[重复]
【发布时间】:2020-05-10 05:15:56
【问题描述】:

我有一个名为“Health_Difficulties”的数据框,如下所示。我需要合并:

Health_Difficulties = data.frame(
X = c(2,2,1,2,2,1,2,2,2,2,2),
Y = c(2,1,2,1,2,1,2,2,2,1,2),
Z = c(2,2,2,1,2,2,2,1,2,2,1)
)

到一个名为 W 的新列中,以消除 3 列并仅保留 W。我试图通过此合并完成的是,如果 X 或 Y 或 Z 有 1,它将记录 1在 W 列上,否则如果三列都没有 1,则记录为 2。

我是 R 的新手,已经检查了 dplyr,但到目前为止还没有运气。任何帮助将不胜感激!

【问题讨论】:

  • 我删除了[merge] 标签,因为它通常与组合数据集相关联,而不是。我正在删除 [coalesce] 标记,因为这通常与将列与缺失/空单元格组合在一起。我不确定替换它们的好标签,但我喜欢@Jakub.Novotny 使用pmin() 的解决方案。
  • @dan19_dan,检查你的数据框和我上面的一样吗?创建 data.frame 时不应使用

标签: r dplyr


【解决方案1】:

这应该可以实现你想要的。

library(tidyverse)

# creating you data
df <- data.frame(
  x = c(2,2,1,2,2,1,2,2,2,2,2),
  y = c(2,1,2,1,2,1,2,2,2,1,2),
  z = c(2,2,2,1,2,2,2,1,2,2,1)
)

# dplyr solution
df %>%
  mutate(w = pmin(x, y, z))

# base R solution
df$w <- do.call(pmin, df)

【讨论】:

  • 也许也添加一个baseR 选项? do.call(pmin, Health_Difficulties)
  • 我已将基本 R 解决方案添加到答案中。谢谢。
  • 太棒了!谢谢你 。效果很好
【解决方案2】:

如果我没听错的话,你只需要创建一个新的向量或 data.frame。

所以,你做到了

Health_Difficulties %>% 
mutate(W = 1+(rowSums(.==1)>0)) %>% 
select(W)

【讨论】:

  • 谢谢你,笨狼!非常简洁的解决方案
【解决方案3】:

这似乎对我有用:

library("tidyverse")

#Create Data
X <- c(2,2,1,2,2,1,2,2,2,2,2)
Y <- c(2,1,2,1,2,1,2,2,2,1,2)
Z <- c(2,2,2,1,2,2,2,1,2,2,1)

#Create dataframe
xyz_table <- as.data.frame(cbind(X,Y,Z))

#Use ifelse to alter your data
xyz_table <- xyz_table %>%
  mutate(W = ifelse (X == 1 | Y==1 | Z == 1,1,
         ifelse(X != 1 & Y != 1 & Z != 1, 2, 0)))

#Create dataframe with only column W
health_difficulties <- xyz_table %>% select (W)

【讨论】:

  • 有道理。谢谢你,约翰!
猜你喜欢
  • 2016-12-29
  • 2017-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多