延长数据,但同时保留 R 中的原始变量之一

问题描述 投票:0回答:1

我可以使用以下方法对我的

DATA
进行长格式化:
tidyr::pivot_longer(DATA, m:y, values_to= "z", names_to= "variable")
,它会在我的
variable
中产生拉长的
Desired_output

但我想知道如何获得变量

m
来显示下面我的
Desired_output
中显示的方式,这样对于每个独特的
id
,变量
m
一次显示为
variable=="y"
,并再次重复显示
 variable=="m"
在 tidyverse 中?

# A solution using reshape2 package is:

stacked <- reshape2::melt(DATA, id.vars = c("id", "x", "m"),
   measure.vars = c("y", "m"), value.name = "z")
Desired_output <- within(stacked, {
  sy <- as.integer(variable == "y")
  sm <- as.integer(variable == "m")
})
DATA <- read.csv("https://stats.idre.ucla.edu/stat/data/ml_sim.csv")
##    id       x       m      y
## 1   1  1.5451  0.1068  0.568
## 2   1  2.2753  2.1104  1.206
. . .

Desired_output:
##     fid id       x       m variable       z sm sy
## 1     1  1  1.5451  0.1068        y  0.5678  0  1
## 2     2  1  2.2753  2.1104        y  1.2061  0  1
## 3     3  1  0.7867  0.0389        y -0.2613  0  1
## 4     4  1 -0.0619  0.4794        y -0.7590  0  1
## 5     5  1  0.1173  0.5908        y  0.5191  0  1
## 6     6  1  1.4809  0.8909        y -0.6311  0  1
## 7     7  1  0.8928 -0.2277        y  0.1521  0  1
## 8     8  1  0.9246  0.7292        y  0.2346  0  1
## 801   1  1  1.5451  0.1068        m  0.1068  1  0
## 802   2  1  2.2753  2.1104        m  2.1104  1  0
## 803   3  1  0.7867  0.0389        m  0.0389  1  0
## 804   4  1 -0.0619  0.4794        m  0.4794  1  0
## 805   5  1  0.1173  0.5908        m  0.5908  1  0
## 806   6  1  1.4809  0.8909        m  0.8909  1  0
## 807   7  1  0.8928 -0.2277        m -0.2277  1  0
## 808   8  1  0.9246  0.7292        m  0.7292  1  0
. . .
r dataframe function dplyr tidyverse
1个回答
0
投票
DATA %>%
  mutate(m1=m, fid=row_number(), .by = id) %>%
  pivot_longer(y:m1, values_to = 'z', names_to = 'variable',
               names_transform = ~str_remove(., '1')) %>%
  mutate(sm= +(variable == 'm'), sy=+(variable == 'y')) %>% 
  arrange(id, desc(variable))

# A tibble: 1,600 × 8
      id       x       m   fid variable      z    sm    sy
   <int>   <dbl>   <dbl> <int> <chr>     <dbl> <int> <int>
 1     1  1.55    0.107      1 y         0.568     0     1
 2     1  2.28    2.11       2 y         1.21      0     1
 3     1  0.787   0.0389     3 y        -0.261     0     1
 4     1 -0.0619  0.479      4 y        -0.759     0     1
 5     1  0.117   0.591      5 y         0.519     0     1
 6     1  1.48    0.891      6 y        -0.631     0     1
 7     1  0.893  -0.228      7 y         0.152     0     1
 8     1  0.925   0.729      8 y         0.235     0     1
 9     1  1.55    0.107      1 m         0.107     1     0
10     1  2.28    2.11       2 m         2.11      1     0
© www.soinside.com 2019 - 2024. All rights reserved.