簡體   English   中英

如何將這種長格式數據幀轉換為寬格式?

[英]How can I convert this long format dataframe into a wide format?

我正在使用RStudioR進行數據分析。 我目前有一個long formatdataframe 我想將其轉換為wide format

dataframedf1 )的提取如下所示。 我已經將第一列轉換為一個factor

提取:

df1 <- read.csv("test1.csv", stringsAsFactors = FALSE, header = TRUE)

df1$Respondent <- factor(df1$Respondent)

df1

      Respondent  Question      CS             Imp     LOS  Type  Hotel
1          1       Q1       Fully Applied     High     12   SML   ABC
2          1       Q2       Optimized         Critical 12   SML   ABC

我想要一個新的dataframe (例如df2 )看起來像這樣:

Respondent      Q1CS           Q1Imp     Q2CS        Q2Imp     LOS   Type   Hotel
  1          Fully Applied      High    Optimized    Critical   12   SML    ABC

我如何在R做到這一點?

附加說明:我曾嘗試查看tidyr程序包及其spread()函數,但是很難解決這個特定問題。

這可以通過gather - unite - spread方法來實現

df %>%
    group_by(Respondent) %>%
    gather(k, v, CS, Imp) %>%
    unite(col, Question, k, sep = "") %>%
    spread(col, v)
#  Respondent LOS Type Hotel          Q1CS Q1Imp      Q2CS    Q2Imp
#1          1  12  SML   ABC Fully Applied  High Optimized Critical

樣本數據

df <- read.table(text =
    "      Respondent  Question      CS             Imp     LOS  Type  Hotel
1          1       Q1       'Fully Applied'     High     12   SML   ABC
2          1       Q2       'Optimized'         Critical 12   SML   ABC", header = T)

在data.table中,這可以單線完成。

dcast(DT, Respondent ~ Question, value.var = c("CS", "Imp"), sep = "")[DT, `:=`(LOS = i.LOS, Type = i.Type, Hotel = i.Hotel), on = "Respondent"][]
  Respondent CSQ1 CSQ2 ImpQ1 ImpQ2 LOS Type Hotel 1: 1 Fully Applied Optimized High Critical 12 SML ABC 

逐步說明

創建樣本數據

DT <- fread("Respondent  Question      CS             Imp     LOS  Type  Hotel
             1  Q1       'Fully Applied'     High     12   SML   ABC
            1   Q2       'Optimized'         Critical 12   SML   ABC", quote = '\'')

通過提問將數據表的一部分轉換為所需格式
colnames可能不是您想要的...您可以始終使用setnames()更改它們。

dcast(DT, Respondent ~ Question, value.var = c("CS", "Imp"), sep = "")
#    Respondent          CSQ1      CSQ2 ImpQ1    ImpQ2
# 1:          1 Fully Applied Optimized  High Critical

然后在原始DT上通過引用加入,以獲取您需要的其余列...

result.from.dcast[DT, `:=`( LOS = i.LOS, Type = i.Type, Hotel = i.Hotel), on = "Respondent"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM