提问人:T K 提问时间:10/8/2022 最后编辑:T K 更新时间:10/8/2022 访问量:27
R 中多列的 If 语句
If statements for a multiple columns in R
问:
data <- data.frame(id=c(1,2,3,4,5,6,7),
q1=c(3,4,5,2,1,2,4),
q2=c(3,4,4,5,4,3,2),
q3=c(2,3,2,3,1,2,3),
q4=c(3,4,4,4,4,5,5))
对于这些 q1-q4,我想写一个语句,其中说如果 q1 = 1,则生成一个 q1_1 =1 ;如果 q1=2,则生成 q1_2 = 2;如果 q1=3,则生成 q1_3=3;如果 Q1=4,则生成 q1_4=4,如果 Q5=5,则为此数据集中的所有问题生成 q1_5=5。我知道我必须做某种循环,然后可能是一个 if 语句,但我根本不熟悉循环。
我希望得到的输出看起来像(但所有问题都有更多列)
id q1 q2 q3 q4 q1_1 q1_2 q1_3 q1_4 q1_5
1 1 3 3 2 3 NA NA 3 NA NA
2 2 4 4 3 4 NA NA NA 4 NA
3 3 5 4 2 4 NA NA NA NA 5
4 4 2 5 3 4 NA 2 NA NA NA
5 5 1 4 1 4 1 NA NA NA NA
6 6 2 3 2 5 NA 2 NA NA NA
7 7 4 2 3 5 4 NA NA 4 NA
任何帮助都是值得赞赏的,谢谢!
答:
1赞
AndS.
10/8/2022
#1
无需循环。先做多,再做宽,然后联接原始数据。
library(tidyverse)
data <- tibble(id=c(1,2,3,4,5,6,7),
q1=c(3,4,5,2,1,2,4),
q2=c(3,4,4,5,4,3,2),
q3=c(2,3,2,3,1,2,3),
q4=c(3,4,4,4,4,5,5))
data |>
pivot_longer(-id) |>
mutate(name = paste(name, value, sep = "_")) |>
pivot_wider() |>
(\(d) left_join(data, d, by = "id"))()
#> # A tibble: 7 x 20
#> id q1 q2 q3 q4 q1_3 q2_3 q3_2 q4_3 q1_4 q2_4 q3_3 q4_4
#> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 1 3 3 2 3 3 3 2 3 NA NA NA NA
#> 2 2 4 4 3 4 NA NA NA NA 4 4 3 4
#> 3 3 5 4 2 4 NA NA 2 NA NA 4 NA 4
#> 4 4 2 5 3 4 NA NA NA NA NA NA 3 4
#> 5 5 1 4 1 4 NA NA NA NA NA 4 NA 4
#> 6 6 2 3 2 5 NA 3 2 NA NA NA NA NA
#> 7 7 4 2 3 5 NA NA NA NA 4 NA 3 NA
#> # ... with 7 more variables: q1_5 <dbl>, q1_2 <dbl>, q2_5 <dbl>, q1_1 <dbl>,
#> # q3_1 <dbl>, q4_5 <dbl>, q2_2 <dbl>
评论