pivot_wider() 为以前的完整数据生成 NA

时间:2021-04-02 14:11:48

标签: r dataframe dplyr tidyverse

我想知道为什么当我尝试将 data.frame 转换为 wide 格式时,两列 Y1Y2 包含 NA

数据集最初在其 NAY1 上没有 Y2。有解决办法吗?

library(tidyverse)

dat <- read.csv("https://raw.githubusercontent.com/rnorouzian/v/main/mvmm.csv")

pivot_wider(dat, names_from= DV, values_from = Response)

#   School Student Treat Gender Pretest MeanPretest   TXG Index1    D1    D2 TreatCAT Gendercat    Y1    Y2
#    <int>   <int> <dbl>  <dbl>   <dbl>       <dbl> <dbl>  <int> <int> <int>    <int>     <dbl> <dbl> <dbl>
# 1      1       1  -0.5   -0.5    48.3        45.6  0.25      1     1     0        0      -0.5  29.4  NA  
# 2      1       1  -0.5   -0.5    48.3        45.6  0.25      2     0     1        0      -0.5  NA    47.4
# 3      1       2  -0.5    0.5    52.1        45.6 -0.25      1     1     0        0       0.5  52.2  NA  

2 个答案:

答案 0 :(得分:2)

我认为你有重复的列,如果你像这样改变你的代码,它应该可以工作,列 DV、D2、D1、Index1 包含相似的模式或完全对比的模式,它们应该一起被重塑,否则,行是在将其转换为更宽的形式时被复制。我们可以通过获取原始表的暗淡来检查:1600 行,如果正确加宽,它应该具有较少的记录数,使用以下代码,将其转换为 800。使用 OP 代码还是 1600。

library(tidyverse)
dat %>% 
  pivot_wider(names_from= c(DV,D2,D1,Index1), values_from = Response)

输出:

  School Student Treat Gender     Pretest MeanPretest   TXG TreatCAT
1      1       1  -0.5   -0.5 48.34437943 45.62666702  0.25        0
2      1       2  -0.5    0.5 52.14841080 45.62666702 -0.25        0
3      1       3  -0.5   -0.5 40.56079483 45.62666702  0.25        0
4      1       4  -0.5    0.5 63.11892700 45.62666702 -0.25        0
5      1       5  -0.5   -0.5 66.79794312 45.62666702  0.25        0
6      1       6  -0.5    0.5 19.42481995 45.62666702 -0.25        0
  Gendercat    Y1_0_1_1    Y2_1_0_2
1      -0.5 29.36377525 47.35104752
2       0.5 52.20915985 49.77211761
3      -0.5 42.21330261 36.21236038
4       0.5 46.69318008 63.72433472
5      -0.5 48.70760345 48.04736328
6       0.5 23.40506554 11.07947922

答案 1 :(得分:2)

试试这个:

dat %>%
    select(-c(Index1, D1, D2)) %>%
    pivot_wider(names_from = DV, values_from = Response)

发生这种情况是因为 Index1D1D2 都是相同的,并且也对应于您要透视的列。如果你摆脱它们,它就可以正常工作