【问题标题】:R - Selecting columns based on a conditionR - 根据条件选择列
【发布时间】:2019-03-21 19:03:32
【问题描述】:

我试图找到一种简单的方法来根据条件 (db$Scale) 从数据集中选择不同的列 (db$Item1db$Item2db$Item3db$Item4)。最好使用 dplyr。这是一个可重现的示例。

Scale <- c(1, 1, 1, 2, 2, 3, 3)
Item1 <- c(4, 5, 4, 6, 7, 7, 6)
Item2 <- c(2, 3, 6, 3, 4, 5, 4)
Item3 <- c(6, 7, 3, 4, 5, 6, 5)
Item4 <- c(2, 5, 3, 5, 2, NA, NA)

db <- data.frame(Scale, Item1, Item2, Item3, Item4)

简要说明:我有一个具有三个不同尺度(1、2 和 3)的数据集,每个尺度具有不同数量的项目。量表1由4项组成,量表2由4项组成,量表3由3项组成。

#  Scale Item1 Item2 Item3 Item4
#1     1     4     2     6     2
#2     1     5     3     7     5
#3     1     4     6     3     3
#4     2     6     3     4     5
#5     2     7     4     5     2
#6     3     7     5     6    NA
#7     3     6     4     5    NA

我需要做的是创建一个新数据集(假设:db.X),我有旧列Scale(新名称:Scale.X),然后是一个新列Item1.XItem 1 列下的值组成,用于标度 1 和 2,以及列在 Item 3 下的值用于标度 3。此外,我想在新列 Item2.X 下报告 db$Item3 的值

#  Scale.X Item1.X Item2.X
#1      1      4      6
#2      1      5      7
#3      1      4      3
#4      2      3      4
#5      2      4      5
#6      3      5      6
#7      3      4      5

【问题讨论】:

  • 您说:Item1.X 由 Item 1 列下的值组成,用于刻度 1 和 2。这不是最终输出中应显示的内容

标签: r function dplyr purrr


【解决方案1】:

这是你要找的吗:

db %>%
  mutate(Scale.X = Scale) %>%
  mutate(Item1.X = ifelse(Scale == 1, Item1, Item2),
         Item2.X = Item3) %>%
  select(Scale.X, Item1.X, Item2.X)
  Scale.X Item1.X Item2.X
1       1       4       6
2       1       5       7
3       1       4       3
4       2       3       4
5       2       4       5
6       3       5       6
7       3       4       5

【讨论】:

    【解决方案2】:

    使用data.table -

    setDT(db)
    db[,Item1.x:=ifelse(Scale == 1, Item1, Item2)]
    setnames(db,c("Scale","Item3"),c("Scale.x","Item2.x"))
    db <- db[,.(Scale.x,Item2.x,Item1.x)]
    

    输出-

    > db
       Scale.x Item2.x Item1.x
    1:       1       6       4
    2:       1       7       5
    3:       1       3       4
    4:       2       4       3
    5:       2       5       4
    6:       3       6       5
    7:       3       5       4
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2019-01-15
      • 2017-12-15
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多