R-根据条件选择列

R-根据条件选择列,r,function,dplyr,purrr,R,Function,Dplyr,Purrr,我试图找到一种简单的方法,根据条件(db$Scale)从数据集中选择不同的列(db$Item1,db$Item2,db$Item3,db$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 <-

我试图找到一种简单的方法,根据条件(
db$Scale
)从数据集中选择不同的列(
db$Item1
db$Item2
db$Item3
db$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)
我需要做的是创建一个新的数据集(比如:
db.X
),我有一个旧的列
Scale
(新名称:
Scale.X
),然后是一个新的列
Item1.X
,它由列
Item1
下的值组成,用于刻度1和刻度2,以及量表3的
项目3
列下的值。另外,我想在新列
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

这就是你想要的吗:

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

这就是你想要的吗:

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

使用
数据表
-

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)]

使用
数据表
-

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)]

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